C语言课程设计报告——教务管理系统

功能说明:实现两种权限的身份登陆的教务管理系统

*/

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

#include "time.h"

#include "memory.h"

#define share                    "d:\\share.dat"                                             //定义邮件地址

#define manager    "d:\\manager.dat"                          //定义管理员邮件地址

#define outmsg                "d:\\outmsg.dat"                                //定义公告邮件地址

#define logtimemsg  "d:\\used login time.dat"             //定义用户登录时间信息

#define star_stu    "d:\\stu_scname.dat"                     //定义学生起始文件信息

#define stu_msg               "d:\\stu.dat"                                         //定义学生成绩信息地址                                                                      

#define mass_key "3110008758"                                                  //定义文件头部密码

typedef struct student stu;

#define sc_num 4                                                                               //只设定4门科目,不允许改动

#define uint unsigned int

/*学生成绩管理系统结构*/

struct student

{

         char num[10];           /*学生学号*/

         char name[10];                  /*学生姓名*/

         uint score[sc_num];         /*科目分数*/

         uint average;            /*科目平均分*/

         stu *next;                           

}st;

         char gettemp=0;

/*管理员身份识别结构*/

typedef struct username user;

struct username

{

         char username[20];//

         char password[20];

}use;

/*时间登录信息*/

struct Logtime

{

         char userlogin[20];

         struct tm;

};

char logc;//登录次数

typedef struct Logtime logtime;

//==========================================================

//定义通讯协议

//==========================================================

#define mass_max  200                              //定义信息量

struct Massage

{

         int cont;                      //文件数量

         char username[15]; //发送人

         char mass[mass_max];//信息

}mas;

typedef struct Massage massage;

//==========================================================

//==========================================================

char userlogin[10];

char sc_name[sc_num][10];

/*以上是学生信息*/

char welcome(void);/*用户界面,返回0,则表示退出系统*/

/*

====================================================================

学生信息操作

====================================================================

*/

stu*creat();/*建立链表*/

void display(stu *head);/*显示用户信息*/

void insert(stu *head);/*增加学生信息*/

stu* delname(stu*head,char *stu_name);/*根据学生姓名删除用户信息*/

stu* delnum(stu *head,char *stu_num);/*根据学生学号删除用户信息*/

stu* checkname(stu *head,char *stu_name);/*输出指定学生的信息*/

stu* checknum(stu *head,char *stu_num);/*输出指定学生学号的学生信息*/

void changsc_name(stu *head,char *name);/*修改用户成绩*/

void changsc_num(stu *head,char *num);/*修改用户成绩*/

void waring(void);/*产生警告信息*/

char cheknum(char *num);/*检查学生学号是否符合格式*/

char chekname(char *name);/*检查学生姓名是否符合格式*/

char chekscore(char score);/*检查学生分数是否符合格式*/

stu* sortscore(stu *head);/*学生按平均成绩排序*/

stu* sortnum(stu *head);/*学生信息按学号排序*/

/*

====================================================================

学生用户登录

====================================================================

*/

char stulogin(void);/*进入普通用户登录界面*/

char stucheck(char *nam,char *stnum);/*查找是否存在该学生信息*/

char newlogin(char *nam,char *stnum);/*注册学生信息*/

void disnewst(void);/*获得学生信息*/

/*

====================================================================

系统管理选择,管理员权限

====================================================================

*/

void stu_system(void);/*对各种操作集中管理*/

void sentmsg(void);/*发送公告*/

char readmsg(void);/*浏览信息*/

char delemsg(void);//删除信息

void chagesbject(void);/*修改课程信息*/

/*

====================================================================

用户登录信息

====================================================================

*/

void setlogintime(void);/*记录用户登录时间*/

void dislogintime(void);/*显示用户登录信息*/

void setused(void);/*注册新用户资料*/

char usedcheckname(char *name);/*用户信息检查,若存在用户,则返回1,否则返回0*/

char usedcheckpass(char *name,char *password);/*查看用户名密码是否符合*/

/*

====================================================================

存储操作

====================================================================

*/

char save(stu *head);/*保存用户数据*/

char disload();/*显示用户信息*/

stu* load(void);/*加载用户数据*/

void clrtxt(char *str);/*清除文本信息*/

char*  creat_txt(char *username);/*根据用户名,创建一个用户文件*/

FILE* chekuser(char *username);/*根据用户名,查找是否有此用户信息,若无,返回NULL*/

/*

====================================================================

---------------main函数----------

====================================================================

*/

void main()

{

         FILE *fp;

         char i,j;

         char name[15];

         system("color b5");

         memset(name,'\0',sizeof(name));

         if((fp=fopen(star_stu ,"r+"))==NULL)

         {

                   printf("将新建文件!\n");

                   fp=fopen(star_stu ,"w+");

         }

         fread(name,sizeof(name),1,fp);

         if(strcmp(name,mass_key)!=0)

         {

                   printf("文件载入出错!\t N为退出 回车键继续...:");

                   i=getchar();

                   if((i=='n')||(i=='N'))

                   {

                            fclose(fp);

                            exit(1);

                   }

                   else

                   {

                            printf("\n\n数据将重新初始化!\n");

                            printf("\n\n请输入4门科目名称\n");

                            memset(name,'\0',sizeof(name));

                            fwrite(name,sizeof(name),5,fp);

                            strcpy(name,mass_key);

                            rewind(fp);

                            fwrite(name,sizeof(name),1,fp);

                            for(i=0;i<sc_num;i++)

                            {

                                     printf("\n\n第%d门科目名称 : ",i+1);

                                     scanf("%s",sc_name[i]);

                                     if(fwrite(sc_name[i],sizeof(sc_name[i]),1,fp)!=1)

                                     {

                                               printf("\n\n\t\t\t\t保存出错!\n");

                                               getchar();

                                               exit(1);

                                     }       

                            }

                   }

         }

         else

         {

                   if(fp==NULL)

                   printf("\n文件错误!");

                   fscanf(fp,"%s%s%s%s",sc_name[0],sc_name[1],sc_name[2],sc_name[3]);

         }

         fclose(fp);

         fp=fopen(share,"w");                                                               //为防止文件在后面打开错误

         fclose(fp);

         fp=fopen(manager,"w");

         fclose(fp);

         fp=fopen(outmsg,"w");

         fclose(fp);

         do

         {

         j=welcome();

         if(j==1)

         {

                   system("cls");

                   printf("\t\t欢迎进入学生用户中心系统!");

                   setlogintime();

                   j=stulogin();

         }

         else if(j==2)

         {

                   setlogintime();

                   stu_system(); 

         }

         }while(j!=0);

         fp=fopen(share,"w");                                                               //为防止文件未关闭,倒置文件内容丢失

         fclose(fp);

         fp=fopen(manager,"w");

         fclose(fp);

         fp=fopen(outmsg,"w");

         fclose(fp);

         fp=fopen(logtimemsg,"w");

         fclose(fp);

         fp=fopen(star_stu,"w");

         fclose(fp);

         fp=fopen(stu_msg,"w");

         fclose(fp);

}

/*

====================================================================

---------------------------初始化用户界面---------------------------

====================================================================

*/

//返回1,则进入stu用户界面

//返回0,则表示退出

//返回2,则表示进入管理员界面

char welcome(void)

{

         char username[20];

         char userpass[20];

         char i,wrong_cont=0,key=0,weling=1,back=0;

         char temp;

         system("color b5");

         while(weling)

         {

         do{

         system("cls");

         printf("\t*********************欢迎进入教务管理系统********************\n");

         printf("\t*                                                           *\n");

         printf("\t*                         1.用户登录                        *\n");

         printf("\t*                                                           *\n");

         printf("\t*                         2.用户注册                        *\n");

         printf("\t*                                                             *\n");

         printf("\t*                         3.管理员登陆                      *\n");

         printf("\t*                                                           *\n");

         printf("\t*                         4.管理员注册                      *\n");

         printf("\t*                                                           *\n");

         printf("\t*                         5.退出系统                        *\n");

         printf("\t*                                                           *\n");

         printf("\t=============================================================\n");

         printf("\t                                             请按命令提示操作\n");

         printf("\n\n\n");

         printf("\n\n\n");

         printf("您输入的命令为:\t");

         i=getchar();

         if((i!='1')&&(i!='2')&&(i!='3')&&(i!='4')&&(i!='5'))

         {

                   printf("\n输入错误的指令!请按命令提示操作 1-3\n");

                   getchar();

                   }

         }while((i!='1')&&(i!='2')&&(i!='3')&&(i!='4')&&(i!='5'));

         switch(i)

         {

                   case '1':

                   {

                                     system("cls");

                                     memset(username,'\0',sizeof(username));

                                     memset(userpass,'\0',sizeof(userpass));

                                     printf("\n\t请输入用户名 :\t");

                                     scanf("%s",username);

                                     printf("\n\t请输入学号 :\t");

                                     scanf("%s",userpass);

                                     temp=stucheck(username,userpass);

                                     if(temp==0)

                                     {

                                               printf("没有学生档案信息!请注册...\n");

                                               getchar();

                                               break;

                                     }

                                     else if(temp==1)

                                     {

                                               memset(userlogin,'\0',sizeof(userlogin));

                                               strcpy(userlogin,username);           

                                               printf("\n\t学生成绩登录有效!");

                                               getchar();

                                               return 1;

                                     }

                                     getchar();

                            //=======================

                            break;

                            }

                   case '2':

                   {

                            system("cls");

                            memset(username,'\0',sizeof(username));

                            memset(userpass,'\0',sizeof(userpass));

                            printf("\n\t请输入用户名 :\t");

                            scanf("%s",username);

                            printf("\n\t请输入学号 :\t");

                            scanf("%s",userpass);

                            while(cheknum(userpass)!=1)

                            {

                                     printf("您的输入格式有误,请重新输入!\n");

                                     printf("按回车键继续...\n");

                                     getchar();

                                     memset(userpass,'\0',sizeof(userpass));

                                     printf("\n\t请输入学号 :\t");

                                     scanf("%s",userpass);

                                     }

                            if(newlogin(username,userpass))

                            printf("\n\t注册成功!用户名:%s\t学号:%s",username,userpass);

                            getchar();

                            break;

                   }

                   case '3':

                   {       

                            do

                            {

                                     system("cls");

                                     memset(username,'\0',sizeof(username));

                                     memset(userpass,'\0',sizeof(userpass));

                                     printf("\n\t请输入用户名 :\t");

                                     scanf("%s",username);

                                     printf("\n\t请输入密码 :\t");

                                     scanf("%s",userpass);

                                     if(usedcheckpass(username,userpass)==0)

                                     {

                                               wrong_cont++;

                                               if(wrong_cont==3)

                                               {

                                                        printf("\n\t输入次数大于3次!请按回车键退出系统!\n");

                                                        getchar();

                                                        weling=0;

                                                        return 0;

                                               }

                                               key=1;

                                               printf("\n\t按1选择返回主菜单\n\t按0继续输入用户验证码\n");

                                               do

                                               {

                                                        back=getchar();

                                                        if((back!='1')&&(back!='0'))

                                                        {

                                                                 printf("\n\t输入错误!按回车键继续...");

                                                                 getchar();

                                                        }

                                               }while((back!='1')&&(back!='0'));

                                               if(back=='1')

                                               key=0;

                                     }

                                     else

                                     {

                                               key=0;

                                               weling =0;

                                               system("cls");

                                               printf("\n\n\t\t欢迎%s进入学生管理系统\n",username);

                                               memset(userlogin,'\0',sizeof(userlogin));

                                               strcpy(userlogin,username);                                                           //记录用户登录信息

                                               return 2;

                                     }

                            }while(key);

                            back=0;

                            weling=1;

                            break;

                            return 2;

                            }

                   case '4':

                   {

                            setused();/*注册新管理员资料*/

                            weling=1;

                            break;

                   }

                   case '5':

                   {

                            weling=0;

                            return 0;

                   }

           }

        

         }

         return 1;

}

/*

====================================================================

---------------建立链表----------

====================================================================

*/

stu*creat()/*建立链表*/

{

         char i,j;

         char stu_num;

         stu *p1, *p2;

         stu *head;

         FILE *fp;

         fp=fopen(stu_msg,"w+");

         head=(stu*)malloc(sizeof(stu));

         head->next=NULL;

         p1=p2=(stu*)malloc(sizeof(stu));

         i=0,j=0;

         system("cls");

         printf("\n\n请输入要录入的学生人数: ");

         scanf("%d",&stu_num);

         for(i=0;i<stu_num;i++)

         {

                   system("cls");

                   p1->average=0;

                   printf("\n\n请输入学生学号: ");

                   scanf("%s",p1->num);

                   while(!cheknum(p1->num))

                   {

                   printf("\n\n输入格式错误!请重新输入学号 : ");

                   scanf("%s",p1->num);    

                   }

                   printf("\n\n请输入学生姓名 : ");

                   scanf("%s",p1->name);

                   while(!chekname(p1->name))

                   {

                            printf("\n\n输入格式出错!不能带数字或下划线!\n");

                            printf("\n\n请重新输入学生姓名: ");

                            scanf("%s",p1->name);

                   }

                      do

                     {

                       printf("\n\n请输入学生%s成绩 :",sc_name[j]);

                       scanf("%d",&p1->score[j]);

                  

                            while((100<p1->score[j])||(p1->score[j]<0))

                                     {

                                               printf("\n\n成绩格式出错!\n ");

                                               getchar();

                                               printf("\n\n请重新输入学生成绩 : ");

                                               scanf("%d",&p1->score[j]);    

                                     }

                            p1->average+=p1->score[j];

                            j++;

                            }while(j<sc_num);

                   j=0;

                   p1->average=p1->average/4;

                   if(i==0)

                   {

                   head->next=p1;                                                                /*分清楚是head->next=p还是head=p*/

                   p2=p1;

                   p1->next=NULL;

                   }

                   else

                   {

                            p2->next=p1;

                            p2=p1;

                            p2->next=NULL;                                            /*产生新的节点*/

                   }

                   fwrite(p1,sizeof(stu),1,fp);

                   p1=(stu*)malloc(sizeof(stu));

         }

         display(head);

         getchar();

         fclose(fp);

         return head;

}

/*

====================================================================

检查学生学号是否符合格式,若正确,则返回1,否则返回0

====================================================================

*/

char cheknum(char *num)/*检查学生学号是否符合格式*/

{

         char i;                                                               /*获取字符串长度*/

         char j=strlen(num);

         for(i=0;i<j;i++)

         {

                   if(('0'>num[i])||('9'<num[i]))

                   {

                   return 0;

                   exit(1);

                   }

         }

         return 1;

}

/*

====================================================================

检查学生姓名是否符合格式,若正确,则返回1,否则返回0

====================================================================

*/

char chekname(char *name)/*检查学生姓名是否符合格式*/

{

         char i;

         for(i=0;i<strlen(name);i++)

         {

                   /*if(('A'>name[i])||(('Z'<name[i])&&('a'>name[i]))||('z'<name[i]))

                   /if(name[i]<18)

                   {

                   return 0;

                   exit(1);

                   }*/

         }

         return 1;

}

/*

====================================================================

显示学生成绩情况

====================================================================

*/

void display(stu *head)/*显示用户信息*/

{

         stu *p1;

         char i=0;

         p1=head->next;

         system("cls");

         if(p1!=NULL)

         {

                   while(p1!=NULL)

                   {

                            if(i==0)

                            {

                                     printf("姓名\t学号\t %s\t %s\t %s\t%s\t平均分 \n",sc_name[0],sc_name[1],sc_name[2],sc_name[3]);

                                     i++;

                            }       

                                     printf("%s\t%s\t %d\t %d\t%d\t%d\t%d\n",\

                                     p1->name,p1->num,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->average);

                                  p1=p1->next;  

                   }

                   getchar();

         }

         else

         {

                   printf("\t\t\t链表为空!\n\n\n请按回车键继续...\n");

                   getchar();

         }

}

/*

====================================================================

插入学生信息

====================================================================

*/

void insert(stu *head)/*增加学生信息*/

{

         stu *p1,*p2;

         char j=0;

         p1=head->next;

         p2=(stu*)malloc(sizeof(stu));           /*创建新的学生信息*/

                   p2->average=0;

                   system("cls");

                   printf("\n\n请输入要增加的学生学号: ");

                   scanf("%s",p2->num);

                   while(!cheknum(p2->num))

                   {

                   printf("\n\n输入格式错误!请重新输入学号 : ");

                   scanf("%s",p2->num);    

                   }

                   printf("\n\n请输入学生的姓名 : ");

                   scanf("%s",p2->name);

                   while(!chekname(p2->name))

                   {

                            printf("\n\n输入格式出错!不能带数字或下划线!\n");

                            printf("\n\n请重新输入学生姓名: ");

                            scanf("%s",p2->name);

                   }

                      do

                     {

                       printf("\n\n请输入学生%s成绩 :",sc_name[j]);

                       scanf("%d",&p2->score[j]);

                            while((100<p2->score[j])||(p2->score[j]<0))

                                     {

                                               printf("\n\n成绩格式出错!\n ");

                                               getchar();

                                               printf("\n\n请重新输入学生成绩 : ");

                                               scanf("%d",&p2->score[j]);    

                                     }

                            p2->average+=p2->score[j];

                            j++;

                            }while(j<sc_num);

                   p2->average=p2->average/4;

         if(head->next==NULL)

         {

                   printf("\n原链表为空!");

                   getchar();

                   head->next=p2;

         }

         else

         {

                   while(p1->next!=NULL)

                            p1=p1->next;

                            p1->next=p2;

                            p2->next=NULL;

         }

         display(head);

         getchar();

}

/*

====================================================================

删除学生信息

====================================================================

*/

stu* delname(stu*head,char *stu_name)/*根据学生姓名删除用户信息*/

{

         stu *p1,*p2;

         char i,j=0;

         system("cls");

         if(head->next==NULL)

         {

                   printf("\n\n没有学生信息!\t操作错误!\n");

                   return head;

         }

         p1=head->next;

         p2=p1;

         while(p1!=NULL)

         {

                   if(strcmp(p1->name,stu_name)==0)

                   {

                            printf("\n\n你所删除的学生姓名为: %s\t学号为:%s\n",p1->name,p1->num);

                            printf("\n\n确定为:y,取消为n\t:");

                            i=getchar();

                                               while(!((i=='y')||(i=='Y')||(i=='n')||(i=='N')))

                                     {

                                               printf("\n\n输入错误!\t请重新输入 :");

                                               i=getchar();

                                     }

                            if((i=='y')||(i=='Y'))

                            {

                                     if(j==0)

                                     {

                                               head->next=p1->next;/*删除头部接点*/

                                     }

                                     else

                                     {

                                               p2->next=p1->next;

                                     }

                                     printf("\n\n\t\t\t\t成功删除用户信息!\n\n\t\t\t按回车键继续...\n");

                                     free(p1);

                                     return head;

                            }

                            else

                            {

                            return head;

                            }

                   }

                   j++;

                   p2=p1;

                   p1=p1->next;

         }

         printf("\n\n\t\t没有此用户记录信息!\n按回车键继续\n");

         getchar();

         system("cls");

         display(head);

         getchar();

         return head;

}

/*

====================================================================

删除学生信息(以学号为对象)

====================================================================

*/

stu* delnum(stu *head,char *stu_num)/*根据学生学号删除用户信息*/

{

         stu *p1,*p2;

         char i,j=0;

         system("cls");

         if(head->next==NULL)

         {

                   printf("\n\n\t\t没有存储学生信息!\n\n\t\t操作错误!\n");

                   return head;

         }

         p1=head->next;

         p2=p1;

         while(p1->next!=NULL)

         {

                   if(strcmp(p1->num,stu_num)==0)

                   {

                           

                            printf("\n\n你所删除的学生姓名为: %s\t学号为:%s\n",p1->name,p1->num);

                            printf("\n\n确定为:y,取消为n\t:");

                            i=getchar();

                                               while(!((i=='y')||(i=='Y')||(i=='n')||(i=='N')))

                                     {

                                               printf("\n\n输入错误!\t请重新输入 :");

                                               i=getchar();

                                     }

                            if((i=='y')||(i=='Y'))

                            {

                                     if(j==0)

                                     {

                                               head->next=p1->next;

                                     }

                                     else

                                     {

                                               p2->next=p1->next;

                                     }

                                               printf("\n\n\t\t\t\t成功删除用户信息!\n\n\t\t\t按回车键继续...\n");

                                               free(p1);

                                               return head;

                            }

                            else

                            return head;

                   }

                   p2=p1;

                   p1=p1->next;

                   j++;

         }

         printf("\n\n没有此用户信息!\n按回车键继续...\n");

         getchar();

         system("cls");

         display(head);

         getchar();

         return head;

}

/*

====================================================================

输出指定学生信息(以学生姓名为对象)

====================================================================

*/

stu* checkname(stu *head,char *stu_name)/*输出指定学生的信息*/

{

         stu *p1;

         system("cls");

         if(head==NULL)

         {

                   printf("\n\n\t\t没有存储学生信息!\t操作错误!\n");

                   getchar();

                   return head;

         }

         p1=head;

         while(p1->next!=NULL)

         {

                   if(strcmp(p1->name,stu_name)==0)

                   {

                           

                            printf("\n\n你所查找的学生信息如下\n");

                            printf(" \n\n%s\t学号为:%s\n",p1->name,p1->num);

                            printf("姓名\t学号\t\t %s\t %s\t %s\t%s\t平均分 \n",\

                            sc_name[0],sc_name[1],sc_name[2],sc_name[3]);

                            printf("%s\t%s\t\t %d\t %d\t%d\t%d\t%d\n",\

                            p1->name,p1->num,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->average);

                            getchar();

                            return p1;

                   }

                   p1=p1->next;

         }

         printf("\n\n\t\t找不到相关用户信息!\n按回车键继续...\n");

         getchar();

         system("cls");

         display(head);

         getchar();

         return (stu*)NULL;

}

/*

====================================================================

输出指定学生信息(以学生学号为对象)

====================================================================

*/

stu* checknum(stu *head,char *stu_num)/*输出指定学生学号的学生信息*/

{

         stu *p1,*p2;

         p2=(stu*)malloc(sizeof(stu));

         system("cls");

         if(head==NULL)

         {

                   printf("\n\n\t\t没有存储学生信息!\t操作错误!\n");

                   return head;

         }

         p1=head;

         while(p1->next!=NULL)

         {

                   if(strcmp(p1->num,stu_num)==0)

                   {

                           

                            printf("\n\n你所查找的学生信息如下\n");

                            printf(" %s\t学号为:%s\n",p1->name,p1->num);

                            printf("姓名\t学号\t\t %s\t %s\t %s\t%s\t平均分 \n",\

                            sc_name[0],sc_name[1],sc_name[2],sc_name[3]);

                            printf("%s\t%s\t\t %d\t %d\t%d\t%d\t%d\n",\

                            p1->name,p1->num,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->average);

                            getchar();

                            return p1;

                   }

                   p1=p1->next;

         }

         printf("\n\n\t\t找不到相关用户信息!\n按回车键继续...\n");

         getchar();

         return (stu*)NULL;

}

/*

====================================================================

修改指定学生信息(以学生姓名为对象)

====================================================================

*/

void changsc_name(stu *head,char *name)/*修改用户成绩*/

{

         stu *p;

         char j=0;

         system("cls");

         p=checkname(head,name);

         if(p!=NULL)

         {

                   p->average=0;

                   printf("\n\n请输入学生新的学号: ");

                   scanf("%s",p->num);

                  while(!cheknum(p->num))

                   {

                   printf("\n\n输入格式错误!请重新输入学号 :\n ");

                   scanf("%s",p->num);       

                   }

                      do

                     {

                       printf("\n\n请输入学生成绩%s :",sc_name[j]);

                       scanf("%d",&p->score[j]);

                            while((100<p->score[j])||(p->score[j]<0))

                                     {

                                               printf("\n\n成绩格式出错!\n ");

                                               getchar();

                                               printf("\n\n请重新输入学生成绩 : ");

                                               scanf("%d",&p->score[j]);       

                                     }

                            p->average+=p->score[j];

                            j++;

                     }while(j<sc_num);

                     p->average=p->average/4;

                     printf("\n\n\t\t用户数据更新完毕!\n请按回车键退出...\n");

                     getchar();

         system("cls");

         display(head);

                     getchar();

         }

}

/*

====================================================================

修改指定学生信息(以学生学号为对象)

====================================================================

*/

void changsc_num(stu *head,char *num)/*修改用户成绩*/

{

         stu *p2;

         char j=0;

         system("cls");

         p2=checknum(head,num);

         if(p2!=NULL)

         {

                   p2->average=0;

                   printf("\n\n请输入学生姓名: ");

                   scanf("%s",p2->name);

                   while(!chekname(p2->name))

                   {

                   printf("\n\n输入格式错误!请重新输入学号 : ");

                   scanf("%s",p2->name);  

                   }

                      do

                     {

                       printf("\n\n请输入学生成绩%s :",sc_name[j]);

                       scanf("%d",&p2->score[j]);

                            while((100<p2->score[j])||(p2->score[j]<0))

                                     {

                                               printf("\n\n成绩格式出错!\n ");

                                               getchar();

                                               printf("\n\n请重新输入学生成绩 : ");

                                               scanf("%d",&p2->score[j]);    

                                     }

                            p2->average+=p2->score[j];

                            j++;

                     }while(j<sc_num);

                     p2->average=p2->average/4;

                     printf("\n\n\t\t用户数据更新完毕!请按回车键退出...\n");

                     getchar();

         }

}

/*

====================================================================

====================================================================

============================存储操作类函数==========================

====================================================================

====================================================================

*/

/*

====================================================================

加载学生信息

====================================================================

*/

stu* load(void)/*加载用户数据*/

{

         FILE *fp;

         stu *p,*head,*p1;

         char i=0,j=0;

         fp=fopen(stu_msg,"r");

         rewind(fp);

         head=(stu*)malloc(sizeof(stu));

         p1=p=(stu *)malloc(sizeof(stu));

         while(fread(p,sizeof(stu),1,fp)==1)

         {

                   if(i==0)

                   {

                            head->next=p;

                            p1=p;       

                   }

                   else

                   {

                            p1->next=p;

                            p1=p;

                            p1->next=NULL;

                            }

                   i++;

                   p=(stu*)malloc(sizeof(stu));

                   j++;

         }

         if(j==0)

         {

                   printf("\n\n\t\t\t没有数据信息可载入!\n");

                   head=NULL;

                   free(p);

                   getchar();

         }

         fclose(fp);

         return head;

}

/*

====================================================================

显示学生信息

====================================================================

*/

char disload()/*显示用户信息*/

{

         FILE *fp;

         stu *p1;

         char i=0;

         p1=(stu*)malloc(sizeof(stu));

         if((fp=fopen(stu_msg,"r+"))==NULL)fp=fopen(stu_msg,"w+");

         rewind(fp);

         while(fread(p1,sizeof(stu),1,fp)==1)

         {

                            printf("%s\t%s\t %d\t %d\t%d\t%d\t%d\n",\

                            p1->name,p1->num,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->average);

                        i++;

                        //fread(p1,sizeof(stu),1,fp);

         }

         fclose(fp);

         if(i==0)

         {

                   printf("\n\t\t\t文件中不含学生信息!\n\t\t\t按回车键继续...\n");

                   getchar();

                   }

         else

         {

                   printf("\n\t\t\t一共记录了%d名学生信息!\n\t\t\t按回车键继续...\n",i);

                   getchar();

         }

}

/*

====================================================================

保存学生信息

====================================================================

*/

char save(stu *head)/*保存用户数据*/

{

         stu *p;

         FILE *fp;

         stu stt;

         char i=0;

         p=head->next;

         system("cls");

         clrtxt(stu_msg);

         fp=fopen(stu_msg,"w");

         rewind(fp);

         //

         if(head->next!=NULL)

         {

                   while(p!=NULL)

                   {

                            fwrite(p,sizeof(stu),1,fp);

                            p=p->next;

                            i++;

                   }

                   if(i==0)

                   {

                            printf("没有保存数据!\n");

                            getchar();

                            fclose(fp);

                            return 0;

                   }

                   else

                   {

                   fclose(fp);

                   return 1;

                   }

         }

         else

         {

                   fclose(fp);

                   return 0; 

         }

         fclose(fp);

         return 0;

}

/*

====================================================================

创建文本信息

====================================================================

*/

char* creat_txt(char *username)/*根据用户名,创建一个用户文件*/

{

         char name[20];

         FILE *fp;

         strcpy(name,"d:\\");

         strcat(name,username);

         strcat(name,".txt");

         fp=fopen(name,"w+");

         system("cls");

         if(fp!=NULL)

         {

                   //printf("\n\n文件路径为:%s\n\n",name);

                   //printf("\n\n\t\t用户文件创建成功!\n\n\t\t请按回车键继续...\n");

                   //getchar();

                   fclose(fp);

                   return name;

         }

         else

         {

                   printf("\n\n\t\t无法创建用户文件!\n\n\t\t请按回车键继续...\n");

                   getchar();

                   fclose(fp);

                   return name;

         }

}

/*

====================================================================

清除文本信息

====================================================================

*/

FILE* chekuser(char *username)/*根据用户名,查找是否有此用户信息,若无,返回NULL*/

{

        

}

/*

====================================================================

清除文本信息

====================================================================

*/

void clrtxt(char *str)/*清除文本信息*/

{

         char clrmem[10];

         char semem[40];

         FILE *fp;

         int i=0,j=0;

         if((fp=fopen(str,"r"))==NULL)

         {

                   printf("\n\t无此文件!");

                   getchar();

         }

         else

         {

                   fclose(fp);

                   fp=fopen(str,"w");

                   memset(clrmem,'\0',sizeof(clrmem));

                   rewind(fp);

                   for(i=0;i<40;i++)

                   {

                            if(fwrite(clrmem,sizeof(clrmem),1,fp)!=1)

                            {

                                     if(j==0)

                                     {

                                     printf("\n\n\t\t文件清除失败!\n\n\t\t请按回车键继续...\n");

                                     getchar();

                                     break;

                                     }

                                     else

                                     {

                                     //printf("\n\n\t\t文件清除成功!\n\n\t\t请按回车键继续...\n");

                                     //getchar();

                                               break;

                                     }

                            }

                            else

                            j++;

                   }

                   fclose(fp);

         }

}

/*

====================================================================

用户登录信息

====================================================================

*/

void setlogintime(void)/*记录用户登录时间*/

{

         FILE *fp;

         int y,m,d,hour,min,sec;

         time_t T;                                                          // 一个可以包含时间信息的长整型

         struct tm *timeinfo;

         time( &T );                                                                // 得到机器的日历时间

         if((fp=fopen(logtimemsg,"a+"))==NULL)

         {

                   fp=fopen(logtimemsg,"w");   

         }

         time( &T );                                                                // 得到机器的日历时间

         timeinfo = localtime( &T );                          // 将日历时间转换为当地时间,timeinfo 是一个时间格式的指针

         y=timeinfo->tm_year + 1900;                    // 年份

         m=timeinfo->tm_mon + 1;                                   // 月份

         d=timeinfo->tm_mday;                               // 日期

         hour=timeinfo->tm_hour;

         min=timeinfo->tm_min;

         sec=timeinfo->tm_sec;

         fwrite(userlogin,sizeof(userlogin),1,fp);

         fwrite(timeinfo,sizeof(struct tm),1,fp);//写入用户登陆信息

         printf("\n\n\n\t\t登陆时间为:\n\t\t%d年 %d月 %d日 %d时 %d分 %d秒\n\n\n", y, m, d,hour,min,sec);

         fclose(fp);

}

/*

====================================================================

用户登录信息

====================================================================

*/

void dislogintime(void)/*显示用户登录信息*/

{

         FILE *fp;

         int y,m,d,hour,min,sec;

         struct tm *timeinfo;

         char name[10];

         int i=0;

         timeinfo=(struct tm*)malloc(sizeof(struct tm));

         fp=fopen(logtimemsg,"r+");

         if(fp==NULL)

         {

                   printf("\n\n\t\t找不到文件信息!\n\n\t\t按回车键继续...\n");

                   getchar();

         }

         else

         {

         memset(name,'\0',sizeof(name));

         while(fread(name,sizeof(name),1,fp)==1)

         {

         fread(timeinfo,sizeof(struct tm),1,fp);

         y=timeinfo->tm_year + 1900;                    // 年份ins

         m=timeinfo->tm_mon + 1;                                   // 月份

         d=timeinfo->tm_mday;                               // 日期

         hour=timeinfo->tm_hour;

         min=timeinfo->tm_min;

         sec=timeinfo->tm_sec;

         i++;

         printf("\n\t第%d次登陆时间为:%d年 %d月 %d日 %d时 %d分 %d秒\t%s用户登录",i,y, m, d,hour,min,sec,name);

         memset(name,'\0',sizeof(name));

         }

         if(i==0)

         printf("\n没有记录用户登录时间!\n");

         getchar();

         free(timeinfo);

         fclose(fp);

         }

}

/*

====================================================================

用户登录信息

====================================================================

*/

void setused(void)/*注册新用户资料*/

{

         FILE *fp;

         char chekpassword[20];                              //10检查用户密码输入

         char lgway[20];

         char i=0; 

         system("cls");

         memset(use.password,'\0',sizeof(use.password));

         memset(chekpassword,'\0',sizeof(chekpassword));

         memset(use.username,'\0',sizeof(use.username));

         do{

         printf("\n\n请输入用户名:\t");

         scanf("%s",use.username);

         printf("\n\n请输入用户密码:\t");

         scanf("%s",use.password);

         printf("\n\n请再次输入密码:\t");

         scanf("%s",chekpassword);

         if(strcmp(use.password,chekpassword)!=0)

         {

                   printf("\n\n\t\t密码不匹配!\n按回车键继续\n");

                   getchar();

                   i=1;

                   memset(use.password,'\0',sizeof(use.password));

                   memset(chekpassword,'\0',sizeof(chekpassword));

                   memset(use.username,'\0',sizeof(use.username));

         }

         else i=0;

         }

         while(i);

         strcpy(lgway,creat_txt(use.username));

         clrtxt(lgway);

         fp=fopen(lgway,"w+");

         if(fp!=NULL)

         {                                                      

                   rewind(fp);/*清除文本信息*/

                   if(fwrite(&use,sizeof(use),1,fp)==1)

                   {

                            rewind(fp);

                            memset(use.username,'\0',sizeof(use.username));

                            memset(use.password,'\0',sizeof(use.password));

                            fscanf(fp,"%s%s",use.username,use.password);/////////////////////////////////此处写有问题!

                            //fread(&use,sizeof(use),1,fp);

                            //printf("您保存的用户名为:%s\n",use.username);

                            //printf("您保存的密码是:%s\n",use.password);

                            //printf("\n\n\t\t数据保存成功!\n按回车键继续...\n");

                            //getchar();

                            fclose(fp);

                   }

                   else

                   {

                            printf("\n数据保存失败!\n按回车键继续...\n");

                            getchar();

                            fclose(fp);

                            }

         }

         else

         {

                   printf("\n用户注册失败!\n按回车键继续...\n");

                   getchar();

                   fclose(fp);

         }

         fclose(fp);

}

/*

====================================================================

用户登录信息

====================================================================

*/

char usedcheckname(char *username)/*用户信息检查*/

{

         char name[20];

         FILE *fp;

         system("color b5");

         strcpy(name,"d:\\");

         strcat(name,username);

         strcat(name,".txt");

         fp=fopen(name,"r+");

         rewind(fp);

         if(fp!=NULL)

         {

                   fclose(fp);

                   return 1;

         }

         else

         {

                   printf("\n\n\t\t用户名输入错误!\n\n\t\t请按回车键继续...\n");

                   getchar();

                   return 0;

         }

}

/*

====================================================================

检查输入密码是否正确

====================================================================

*/

char usedcheckpass(char *user,char *pass)/*查看用户名密码是否符合*/

{

         char filename[20];

         FILE *fp;

         memset(filename,'\0',sizeof(filename));

         strcpy(filename,"d:\\");

         strcat(filename,user);

         strcat(filename,".txt");

         if((fp=fopen(filename,"r"))==NULL)

         {

                   printf("\n操作错误!不存在此用户!\n");

                   getchar();

                   return 0;

         }

         //printf("\n文件名为:%s\n",filename);

         getchar();

         memset(use.username,'\0',sizeof(use.username));

         memset(use.password,'\0',sizeof(use.password));

         if(fp==NULL)

         {

                   printf("\n\n\t\t用户名错误!\n\n\t\t请按回车键继续...\n");

                   getchar();

                   fclose(fp);

                   return 0;

         }

         rewind(fp);      

         fread(&use,sizeof(use),1,fp);

         //printf("用户名:%s\t密码:%s\n",use.username,use.password);

         //getchar();

         if(strcmp(use.password,pass)==0)

         {

                   system("cls");

                   printf("\n\n\t\t密码输入正确!\n\n\t\t请按回车键继续...\n");

                   getchar();

                   fclose(fp);

                   return 1;

         }

         else

         {

                   printf("\n\n\t\t密码输入错误!\n\n\t\t请按回车键继续...\n");

                   getchar();

                   fclose(fp);

                   return 0;

         }

}

/*

====================================================================

系统管理选择

====================================================================

*/

void stu_system(void)/*对各种操作集中管理*/

{

         FILE *fp;

         stu *head,*temp_str;

         char menue[8],reg[8],temp[10];

         char key=0,i=0,quet=0,insert_num;

         char str3[10];

         char loginout=0;

         system("color b4");

         head=load();

         do

         {

         quet=0;

         loginout=0;

                   system("color b5");

                   getchar();

                   while(head==NULL)

                   {

                            system("cls");

                            printf("数表为空,请至少输入一个学生信息!\n");

                            head=creat();

                   }

                   while(!quet)

                   {

                   do{

                   system("cls");

                   printf("\t\t学生成绩管理系统\t\t\t管理员%s登录\n",userlogin);

                   printf("\t============================================================\n");

                   printf("\t||\t\t0.修改课程信息\n");

                   printf("\t||\n");

                   printf("\t||\t\t1.查看学生信息\t\t2.增加学生信息\n");

                   printf("\t||\n");

                   printf("\t||\t\t3.删除学生信息\t\t4.修改学生信息\n");

                   printf("\t||\n");

                   printf("\t||\t\t5.查找学生信息\t\t6.广播信息管理\n");

                   printf("\t||\n");

                   printf("\t||\t\t7.历史登录信息\t\t8.注销用户信息\n");

                   printf("\t||\n");

                   printf("\t||\t\t9.整理学生信息\t\ta.退出系统\n");

                   printf("\t============================================================\n");

                   printf("\t\t\t\t\t\t请按命令操作\n");  

                   printf("您输入的命令是:\t");

                   i=getchar();

                   if(!((i>='0')||(i<='9')))

                   printf("\n输入不合法!请继续按命令操作!1-8\n");

                   }while(!((i>='0')||(i<='9')));

                   switch (i)

                   {

                            case '0':

                            {

                                     chagesbject();

                                     break;

                                     }

                            case '1':

                            {

                                     system("cls");

                                     printf("姓名\t学号\t %s\t %s\t %s\t%s\t平均分 \n",\

                                               sc_name[0],sc_name[1],sc_name[2],sc_name[3]);

                                     disload(head);

                                     printf("\n\n\t\t按回车键返回...\n\n");

                                     getchar();

                                     break;

                            }

                            case '2':

                            {

                                     system("cls");

                                     printf("\n请输入要增加学生的个数:\t");

                                     scanf("%d",&insert_num);

                                     for(temp[2]=0;temp[2]<insert_num;temp[2]++)

                                     {

                                               insert(head);

                                     }

                                     save(head);

                                     break;

                            }

                            case '3':

                            {

                                     do

                                     {

                                     system("cls");

                                     display(head);

                                     printf("\t==============================");

                                     printf("\n\t请输入删除方式:\t");

                                     printf("\n\t1.以学号方式");

                                     printf("\n\t2.以姓名方式");

                                     printf("\n\t3.退出");

                                     printf("\n\t==============================");

                                     printf("\n");

                                     printf("您的选择是: \t");

                                     temp[3]=getchar();

                                     if(!((temp[3]=='1')||(temp[3]=='2')||(temp[3]=='3')))

                                     {

                                               printf("\n您的输入格式不正确,请重新输入!\n按回车键继续...");

                                               getchar();

                                               }

                                     }while(!((temp[3]=='1')||(temp[3]=='2')||(temp[3]=='3')));

                                     if(temp[3]=='1')

                                     {

                                               memset(str3,'\0',sizeof(str3));

                                               printf("\n请输入您要删除的学生学号:\t");

                                               scanf("%s",str3);

                                               head=delnum(head,str3);

                                               system("cls");

                                               display(head);

                                               save(head);

                                               getchar();

                                     }

                                     else

                                     {

                                               memset(str3,'\0',sizeof(str3));

                                               printf("\n请输入您要删除的学生姓名:\t");

                                               scanf("%s",str3);

                                               head=delname(head,str3);

                                               system("cls");

                                               display(head);

                                               save(head);

                                               getchar();

                                     }

                                     break;

                            }

                            case '4':

                            {

                                     do

                                     {

                                     system("cls");

                                     display(head);

                                     printf("==============================");

                                     printf("\n\t请输入修改方式:\t");

                                     printf("\n\t1.以学号方式");

                                     printf("\n\t2.以姓名方式");

                                     printf("\n\t3.退出");

                                     printf("\n==============================");

                                     printf("\n\n\n\n\n");

                                     printf("您的选择是: \t");

                                     temp[4]=getchar();

                                     if(!((temp[4]=='1')||(temp[4]=='2')||(temp[4]=='3')))

                                     {

                                               printf("\n您的输入格式不正确,请重新输入!\n按回车键继续...");

                                               getchar();

                                               }

                                     }while(!((temp[4]=='1')||(temp[4]=='2')||(temp[4]=='3')));

                                     if(temp[4]=='1')

                                     {

                                               memset(str3,'\0',sizeof(str3));

                                               printf("\n请输入您要修改的学生学号:\t");

                                               scanf("%s",str3);

                                               changsc_num(head,str3);

                                               save(head);

                                     }

                                     else if(temp[4]=='2')

                                     {

                                               memset(str3,'\0',sizeof(str3));

                                               printf("\n请输入您要修改的学生姓名:\t");

                                               scanf("%s",str3);

                                               changsc_name(head,str3);

                                               save(head);

                                     }

                                     break;

                            }

                            case '5':

                            {

                                     do

                                     {

                                     system("cls");

                                     printf("\t==============================");

                                     printf("\n\t\t请输入查找方式:\t");

                                     printf("\n\t\t1.以学号方式");

                                     printf("\n\t\t2.以姓名方式");

                                     printf("\n\t\t3.退出");

                                     printf("\t\n==============================");

                                     printf("\n");

                                     printf("您的选择是: \t");

                                     temp[5]=getchar();

                                     if(!((temp[5]=='1')||(temp[5]=='2')||(temp[5]=='3')))

                                     {

                                               printf("\n您的输入格式不正确,请重新输入!\n按回车键继续...");

                                               getchar();

                                               }

                                     }while(!((temp[5]=='1')||(temp[5]=='2')||(temp[5]=='3')));

                                     if(temp[5]=='1')

                                     {

                                               memset(str3,'\0',sizeof(str3));

                                               printf("\n请输入您要查找的学生学号:\t");

                                               scanf("%s",str3);

                                               checknum(head,str3);

                                               getchar();

                                     }

                                     else if(temp[5]=='2')

                                     {

                                               memset(str3,'\0',sizeof(str3));

                                               printf("\n请输入您要查找的学生姓名:\t");

                                               scanf("%s",str3);

                                         checkname(head,str3);

                                         getchar();

                                     }

                                     break;

                            }

                            case '6':

                            {

                                     do

                                     {

                                     system("cls");

                                     printf("\t==============================");

                                     printf("\n\t请输入信息管理操作:\n");

                                     printf("\n\t1.发布公告\n");

                                     printf("\n\t2.删除信息\n");

                                     printf("\n\t3.查看信息\n");

                                     printf("\n\t4.退出");

                                     printf("\n\t==============================");

                                     printf("\n");

                                     printf("您的选择是: \t");

                                     temp[6]=getchar();

                                     if(!((temp[6]>'0')&&(temp[6]<'5')))

                                     {

                                               printf("\n您的输入格式不正确,请重新输入!\n按回车键继续...");

                                               getchar();

                                               }

                                     }while(!((temp[6]>'0')&&(temp[6]<'5')));

                                     switch(temp[6])

                                     {

                                               case '1':

                                               {

                                                        sentmsg();

                                                        break;

                                               }

                                               case '2':

                                               {

                                                        while(delemsg());

                                                        break;

                                               }

                                               case '3':

                                               {

                                                        while(readmsg());

                                                        break;

                                               }

                                               case '4':

                                               {

                                                        break;

                                               }

                                     //disload();

                                     break;

                                     }

                                     break;

                            }

                            case '7':

                            {

                                     system("cls");

                                     dislogintime();

                                     getchar();

                                     getchar();

                                     break;

                            }

                            case '8':

                            {

                                     save(head);

                                     printf("\n\t您将注销用户登录信息!按回车键退出...");

                                     getchar();

                                     quet=1;                                         //先退出系统,然后进入用户登录界面

                                     loginout=0;

                                     break;

                            }

                            case '9':

                            {

                                     do

                                     {

                                     system("cls");

                                     printf("\t==============================");

                                     printf("\n\t请输入信息管理操作:\n");

                                     printf("\n\t1.学号排序\n");

                                     printf("\n\t2.平均分信息\n");

                                     printf("\n\t3.退出");

                                     printf("\n\t==============================");

                                     printf("\n");

                                     printf("您的选择是: \t");

                                     temp[9]=getchar();

                                     if(!((temp[9]>'0')&&(temp[9]<'4')))

                                     {

                                               printf("\n您的输入格式不正确,请重新输入!\n按回车键继续...");

                                               getchar();

                                               }

                                     }while(!((temp[9]>'0')&&(temp[9]<'4')));

                                     switch(temp[9])

                                     {

                                               case '1':

                                               {

                                                        head=sortnum(head);

                                                        save(head);

                                                        disload(head);

                                                        getchar();

                                                        break;

                                               }

                                               case '2':

                                               {

                                                        head=sortscore(head);

                                                        save(head);

                                                        disload(head);

                                                        getchar();

                                                        break;

                                               }

                                              

                                     }

                                     break;

                            }

                            case 'a':

                            {

                                     quet=1;

                                     loginout=0;

                                     do

                                     {

                                               system("cls");

                                               printf("\n\n\t您将退出教务管理系统...\n");

                                               printf("\n\n\tY:确认退出\t\tN:返回\n");

                                               printf("\n\n\n");

                                               printf("您的选择是:\t");

                                               i=getchar();

                                               if(!((i=='y')||(i=='Y')||(i=='n')||(i=='N')))

                                               {

                                                        printf("\n您的输入有误!请按回车键继续...");

                                                        getchar();

                                                        menue[7]=1;

                                               }

                                               else menue[7]=0;

                                     }

                                     while(menue[7]);

                                     if((i=='N')||(i=='n'))

                                     quet=0;

                                     break;

                                     }

                            }

                   }

                   if(quet==1)

                   {

                           

                   }

 }while(loginout);

}

/*

====================================================================

学生用户登录

====================================================================

*/

char stulogin(void)/*进入普通用户登录界面*/

{

         char temp[6];//定义数据项的变量

         int tem[6];

         char going[6];

         FILE *fp;

         massage *msg;//定义信息载体

         char key,i,logout=0;

         while(!logout)                                                          //如果不是选择退出

         {

         do

         {

         system("cls");

         printf("                                                                 %s学生登录\n",userlogin);

         printf("\t=============================================\n");

         printf("\t\t欢迎进入学生信息中心\n");

         printf("\n");

         printf("\t\t1.查看学生信息\n");

         printf("\n");

         printf("\t\t2.给管理员留言\n");

         printf("\n");

         printf("\t\t3.查看广播\n");

         printf("\n");

         printf("\t\t4.发送广播\n");

         printf("\n");

         printf("\t\t5.查看公告\n");

         printf("\n");

         printf("\t\t6.注销用户\n");

         printf("\t=============================================\n");

         printf("                          请按数字进行菜单选择\n");

         printf("\n您的选择是:\t");

         key=getchar();

         if(!((key>'0')&&(key<'7')))

         {

                   printf("\n您的输入有误,请重新输入!");

                   printf("\n\n请按回车键继续...");

                   getchar();

         }

         }while(!((key>'0')&&(key<'7')));

         switch(key)

         {

                   case '1':

                   {

                            disnewst();                                   //显示学生信息

                            getchar();

                            getchar();

                            break;

                   }

                   case '2':

                   {

                            system("cls");

                            msg=(massage*)malloc(sizeof(massage));

                            memset(msg->username,'\0',sizeof(msg->username));//清除数组内容

                            strcpy(msg->username,"学生");

                            strcpy(msg->username,userlogin);                            //加载用户名

                            printf("\n您最大能留言的字数不超过mass_max个英文字符");

                            printf("\n\n\t请输入您要留言的信息,按回车键结束:\t");

                            scanf("%s",msg->mass);

                            fp=fopen(manager,"a+");

                            fwrite(msg,sizeof(massage),1,fp);

                            fclose(fp);                                                                                    //结束操作

                            printf("\n留言成功!按回车键继续...");

                            getchar();

                            getchar();

                            free(msg);

                            break;

                   }

                   case '3':

                   {

                            system("cls");

                            msg=(massage*)malloc(sizeof(massage));

                            fp=fopen(share,"r");

                            memset(msg,'\0',sizeof(massage));//清除信息内容

                            going[5]=1;

                            rewind(fp);

                            while((fread(msg,sizeof(massage),1,fp)!=0))

                            {

                                     printf("%s用户:\t",msg->username);

                                     printf("%s:\n\n",msg->mass);

                            }

                            fclose(fp);                                                                                    //结束操作

                            printf("\n退出成功!按回车键继续...");

                            getchar();

                            getchar();

                            free(msg);

                            break;

                   }

                   case '4':

                   {

                            system("cls");

                            msg=(massage*)malloc(sizeof(massage));

                            memset(msg->username,'\0',sizeof(msg->username));//清除数组内容

                            strcpy(msg->username,"学生");

                            strcpy(msg->username,userlogin);                            //加载用户名

                            system("cls");

                            printf("\n\t您最大能留言的字数不能超过200个英文字符");

                            printf("\n\n请输入您要留言的信息,按回车键结束:\t");

                            scanf("%s",msg->mass);

                            fp=fopen(share,"a+");

                            fwrite(msg,sizeof(massage),1,fp);

                            fclose(fp);                                                                           //结束操作

                            printf("\n信息发送成功!按回车键继续...");

                            getchar();

                            getchar();

                            free(msg);

                            break;

                   }

                   case '5':

                   {

                            system("cls");

                            msg=(massage*)malloc(sizeof(massage));

                            fp=fopen(outmsg,"r");

                            memset(msg,'\0',sizeof(massage));//清除信息内容

                            going[5]=1;

                            rewind(fp);

                            while((fread(msg,sizeof(massage),1,fp)!=0))

                            {

                                     printf("%s用户:\t",msg->username);

                                     printf("%s:\n\n",msg->mass);

                            }

                            fclose(fp);                                                                                    //结束操作

                            printf("\n退出成功!按回车键继续...");

                            getchar();

                            getchar();

                            free(msg);

                            break;

                            }

                   case '6':

                   {

                            system("cls");

                            do{

                            printf("\n\t\t您将退出学生用户中心\n");

                            printf("\n\t\tY:确认\tN:取消");

                            printf("\n\n您的选择是:\t");

                            temp[5]=getchar();

                            }while(!((temp[5]=='y')||(temp[5]=='Y')||(temp[5]=='n')||(temp[5]=='N')));

                            if(temp[5]=='y'||temp[5]=='Y')

                            {

                                     return 1;

                            }

                            break;

                   }

         }

         }

}

/*

====================================================================

学生用户登录返回0,则说明文件不存在,返回1,则说明找到用户信息,返回2,说明刚注册了该用户信息

====================================================================

*/

char stucheck(char *nam,char *stnum)/*查找是否存在该学生信息*/

{

         FILE *fp;            /*用于打开用户数据库*/

         stu *st;              /*目的用于寻找学生信息*/

         st=(stu*)malloc(sizeof(stu));

         fp=fopen(stu_msg,"r");

         if(fp==NULL)

         {

                   printf("\n\t\t没有用户数据!请重新注册用户信息...");

                   getchar();

                   return 0;

         }

         rewind(fp);

         while((fread(st,sizeof(stu),1,fp))==1)

         {

                   if((strcmp(st->name,nam)==0)&&(strcmp(st->num,stnum)==0))  /*核实用户名和学号是否正确*/

                   {

                            memset(userlogin,'\0',sizeof(userlogin));

                            strcpy(userlogin,st->name);                                         /*存在该学生用户,保存用户姓名*/

                            printf("\n\t\t用户存在!请按回车键继续...");

                            getchar();

                            fclose(fp);                                                                                    /*关闭学生文件*/

                            return 1;                                                                             /*操作成功*/

                   }

                   if(strcmp(st->name,nam)==0)

                   {

                            printf("\n\t\t用户名存在,学号错误!请按回车键继续...\n");

                            getchar();

                            fclose(fp);

                            return 2;

                   }

         }

         fclose(fp);

         printf("\n\t\t学生用户不存在\n");

         getchar();

         return 3;

        

}

/*

====================================================================

学生用户登录返回0,则说明文件不存在,返回1,则说明找到用户信息,返回2,说明刚注册了该用户信息

====================================================================

*/

char newlogin(char *nam,char *stnum)/*注册学生信息*/

{

         char i=0;

         FILE *fp;

         stu *st;

         st=(stu*)malloc(sizeof(stu));

         i=stucheck(nam,stnum);

         switch(i)

         {

                   case 0:

                   {

                            fp=fopen(stu_msg,"w");

                            printf("\n\t\t%s信息将被注册...",nam);

                            getchar();

                            memset(st->num,'\0',sizeof(st->num));                             /*对数据进行清零*/

                            memset(st->name,'\0',sizeof(st->name));                                  /*对数据进行清零*/

                            strcpy(st->name,nam);

                            strcpy(st->num,stnum);

                            st->score[0]=0;

                            st->score[1]=0;

                            st->score[2]=0;

                            st->score[3]=0;

                            st->average=0;

                            fwrite(st,sizeof(stu),1,fp);                                                      /*保存学生信息*/

                            fclose(fp);

                            return 1;

                   }

                   case 1:

                   {

                            return 0;

                            break;

                   }

                   case 2:

                   {

                            return 0;

                            break;

                   }

                   case 3:

                   {

                            memset(userlogin,'\0',sizeof(userlogin));

                            strcpy(userlogin,st->name);            

                            fp=fopen(stu_msg,"a");

                            printf("\n\t\t%s信息将被注册...");

                            memset(st->num,'\0',sizeof(st->num));                             /*对数据进行清零*/

                            memset(st->name,'\0',sizeof(st->name));                                  /*对数据进行清零*/

                            strcpy(st->name,nam);

                            strcpy(st->num,stnum);

                            st->score[0]=0;

                            st->score[1]=0;

                            st->score[2]=0;

                            st->score[3]=0;

                            st->average=0;

                            fwrite(st,sizeof(stu),1,fp);                                                      /*保存学生信息*/

                            fclose(fp);

                            return 1;

                   }

                   default :return 0;

         }

}

/*

====================================================================

显示学生用户信息

====================================================================

*/

void disnewst(void)/*获得学生信息*/

{

         stu *p;

         FILE *fp;

         char temp,full=0;

         printf("姓名\t学号\t %s\t %s\t %s\t%s\t平均分 \n",\

                                               sc_name[0],sc_name[1],sc_name[2],sc_name[3]);

         fp=fopen(stu_msg,"r");

         p=(stu*)malloc(sizeof(stu));

         do

         {

                   if(fread(p,sizeof(stu),1,fp)==1)

                   {

                            if(strcmp(userlogin,p->name)==0)

                                     {

                                               full=1;                                            /*已找到用户信息*/

                                               temp=0;                                        /*退出循环*/

                                     }

                            else

                            {

                                     full =0;

                                     temp =1;

                            }

                   }

                   else

                   {

                            temp=0;

                   }

         }while(temp);

         if(full==1)

         {

                   printf("%s\t%s\t %d\t %d\t%d\t%d\t%d\n",\

                                     p->name,p->num,p->score[0],p->score[1],p->score[2],p->score[3],p->average);

                   getchar();

         }

         else

         {

         printf("\n\n\t\t找不到学生用户信息!按回车键继续...");

         getchar();

         getchar();

         }

         fclose(fp);                                                                                                                /*关闭文件信息*/

}

/*

====================================================================

发送公告

====================================================================

*/

void sentmsg(void)/*发送公告*/

{

         FILE *fp;

         massage *msg;

         int i=0;

         fp=fopen(outmsg,"a+");

         if(fp==NULL)

         {

                   fp=fopen(outmsg,"w+");

         }

         msg=(massage*)malloc(sizeof(massage));

         system("cls");

         printf("\n\n请输入您要公布的信息,按回车键结束:\t");

         memset(msg,'\0',sizeof(massage));//清除

         scanf("%s",msg->mass);

         strcpy(msg->username,"管理员");

         strcpy(msg->username,userlogin);

         fwrite(msg,sizeof(massage),1,fp);

         printf("\n\n公告发布成功!");

         getchar();

         getchar();

         free(msg);

         fclose(fp);

}

/*

====================================================================

浏览公告

====================================================================

*/

char readmsg(void)/*浏览信息*/

{

         FILE *fp;

         massage *msg;

         int i=0;

         char key=0;

         char chose,temp=1;

         do{

         system("cls");

         printf("======================================\n");

         printf("请输入您要浏览的信息:");

         printf(" \n");

         printf("1.管理员邮箱\n");

         printf("\n");

         printf("2.学生共享信息\n");

         printf("\n");

         printf("3.公告邮箱信息\n");

         printf("\n");

         printf("4.退出");

         printf("\n======================================\n");

         printf("\t\t\t\t请按照提示选择\n\n");

         printf("\n\n您的选择是:\t");

         key=getchar();

         if(!((key>'0')&&(key<'5')))

         {

                   printf("\n您的输入有误,请按回车键继续...\n");

                   getchar();

                   }

         }while(!((key>'0')&&(key<'5')));

         switch(key)

         {

                   case '1':

                   {

                            fp=fopen(manager,"r");

                            msg=(massage*)malloc(sizeof(massage));

                            memset(msg,'\0',sizeof(massage));

                            rewind(fp);

                            while((fread(msg,sizeof(massage),1,fp)==1))

                            {

                                     printf("%s用户:\t",msg->username);

                                     printf("%s\n",msg->mass);

                                     memset(msg,'\0',sizeof(massage));

                            }

                            getchar();

                            getchar();

                            free(msg);

                            fclose(fp);

                            return 1;

                            break;

                   }

                   case '2':

                   {

                            msg=(massage*)malloc(sizeof(massage));

                            fp=fopen(share,"r");

                            memset(msg,'\0',sizeof(massage));//清除信息内容

                            rewind(fp);

                            while((fread(msg,sizeof(massage),1,fp))!=0)

                            {

                                     printf("%s用户:\t",msg->username);

                                     printf("%s:\n\n",msg->mass);

                            }

                            fclose(fp);                           

                            printf("\n\n信息读取完毕!按回车键继续...");//结束操作

                            getchar();

                            getchar();

                            free(msg);

                            return 1;

                            break;

                   }

                   case '3':

                   {

                            fp=fopen(outmsg,"r");

                            msg=(massage*)malloc(sizeof(massage));

                            memset(msg,'\0',sizeof(massage));

                            rewind(fp);

                            while((fread(msg,sizeof(massage),1,fp)==1)&&temp)

                            {

                                     printf("%s用户:\t",msg->username);

                                     printf("%s\n",msg->mass);

                                     memset(msg,'\0',sizeof(massage));

                            }

                            getchar();

                            getchar();

                            free(msg);

                            fclose(fp);

                            return 1;

                            break;

                   }

                   case '4':

                   {

                            return 0;

                            break;

                            }

         }

        

}

/*

====================================================================

浏览公告

====================================================================

*/

char delemsg(void)//删除信息

{

         FILE *fp;

         massage *msg;

         int i=0;

         char key=0;

         char chose,temp=1;

         do{

         system("cls");

         printf("======================================\n");

         printf("请输入您要删除的信息:");

         printf(" \n");

         printf("1.管理员邮箱\n");

         printf("\n");

         printf("2.学生共享信息\n");

         printf("\n");

         printf("3.公告信息\n");

         printf("\n");

         printf("4.退出");

         printf("\n======================================\n");

         printf("\t\t\t\t请按照提示选择\n\n");

         printf("\n\n您的选择是:\t");

         key=getchar();

         if(!((key>'0')&&(key<'5')))

         {

                   printf("\n您的输入有误,请按回车键继续...\n");

                   getchar();

                   }

         }while(!((key>'0')&&(key<'5')));

         switch(key)

         {

                   case '1':

                   {

                            fp=fopen(manager,"w+");

                            msg=(massage*)malloc(sizeof(massage));

                            memset(msg,'\0',sizeof(massage));

                            rewind(fp);

                            fwrite(msg,sizeof(massage),100,fp);

                            clearerr(fp);

                            system("cls");

                            printf("管理员邮箱被清空!\n");

                            getchar();

                            free(msg);

                            fclose(fp);

                            return 1;

                            break;

                   }

                   case '2':

                   {

                            msg=(massage*)malloc(sizeof(massage));

                            fp=fopen(share,"w+");

                            memset(msg,'\0',sizeof(massage));//清除信息内容

                            fread(msg,sizeof(massage),1,fp);

                            clearerr(fp);

                            fclose(fp);

                            system("cls");                                                                                     //结束操作

                            printf("共享信息被清空!\n");

                            getchar();

                            free(msg);

                            return 1;

                            break;

                   }

                   case '3':

                   {

                            msg=(massage*)malloc(sizeof(massage));

                            fp=fopen(outmsg,"w+");

                            memset(msg,'\0',sizeof(massage));//清除信息内容

                            fread(msg,sizeof(massage),1,fp);

                            clearerr(fp);

                            fclose(fp);

                            system("cls");

                            printf("公告信息成功删除!\n");                                                                               //结束操作

                            getchar();

                            free(msg);

                            return 1;

                            break;

                   }

                   case '4':

                   {

                            return 0;

                            }

         }

        

        

}

/*

====================================================================

修改课目信息

====================================================================

*/

void chagesbject(void)/*修改课程信息*/

{

                   FILE *fp;

                   char i;

                   char name[15];

                   //head=(stu*)malloc(sizeof(stu));

                   memset(name,'\0',sizeof(name));

                   fp=fopen(star_stu,"w+");

                   printf("\n\n请输入4门科目名称\n");

                   memset(name,'\0',sizeof(name));

                   fwrite(name,sizeof(name),5,fp);

                   strcpy(name,mass_key);

                   rewind(fp);

                   fwrite(name,sizeof(name),1,fp);

                   for(i=0;i<sc_num;i++)

                   {

                            printf("\n\n第%d门科目名称 : ",i+1);

                            scanf("%s",sc_name[i]);

                            if(fwrite(sc_name[i],sizeof(sc_name[i]),1,fp)!=1)

                            {

                                     printf("\n\n\t\t\t\t保存出错!\n");

                                     getchar();

                                     fclose(fp);

                                     break;

                            }       

                           

                   }

                   fclose(fp);

}

/*

====================================================================

学生信息排序

====================================================================

*/

stu* sortnum(stu *head)

{

         stu *p1,*p2,*p3,*p4,*p5,*p6;

         char i,j,lenth=0;

         display(head);

         p1=p2=p3=p4=p5=p6=NULL;

         for(lenth=0;lenth<2;lenth++)

         {

         if(head->next!=NULL)

         {

                   p1=head->next;

                   p2=head;

                   while(p2->next!=NULL)

                   {

                                     p1=p2->next;                                                  //重置p1

                                     while(p1->next!=NULL)

                                     {

                                               if(strcmp(p1->next->num,p2->next->num)<0)

                                               {

                                                        p3=p2->next;

                                                        p4=p3->next;

                                                        p5=p1->next;

                                                        p6=p5->next;

                                                        p2->next=p5;

                                                        p5->next=p3;

                                                        p1->next=p6;

                                               }

                                               if(p1->next!=NULL)

                                               p1=p1->next;

                                               else

                                               break;

                                     }

                                     p2=p2->next;

                   }

         }

         }

         return head;

}

/*

====================================================================

学生平均分排序

====================================================================

*/

stu* sortscore(stu *head)

{

         stu *p1,*p2,*p3,*p4,*p5,*p6;

         char i,j,lenth=0;

         p1=p2=p3=p4=p5=p6=NULL;

         for(lenth=0;lenth<2;lenth++)

         {

         if(head->next!=NULL)

         {

                   p2=head;

                   p1=p2->next;                                                  //重置p1

                   while(p2->next!=NULL)

                   {

                                                                          

                                     while(p1->next!=NULL)

                                     {

                                               if(p1->next->average>p2->next->average)

                                               {

                                                        p3=p2->next;

                                                        p4=p3->next;

                                                        p5=p1->next;

                                                        p6=p5->next;

                                                        p2->next=p5;

                                                        p5->next=p3;

                                                        p1->next=p6;

                                               }

                                               if(p1->next!=NULL)

                                               p1=p1->next;

                                               else

                                               break;

                                     }

                                     p2=p2->next;                                                  //p1,p2是数据的前驱节点

                                     p1=p2->next;

                            }

         }

         }

         return head;

}

相关推荐