1、 . 功能说明:实现两种权限的身份登陆的教务管理系统 */ #include "stdio.h" #include "stdlib.h" #include "string.h" #include "time.h" #include "memory.h" #de
2、fine 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_same.dat" //定义学生起始文件信息 #define stu_msg "d:\\stu.dat" //定义学生成绩信息
3、地址 #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]; /*学生XX*/ uint score[sc_num]; /*科目分数*/ uint average; /*科目平均分*/ st
4、u *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; //=======================
5、 //定义通讯协议 //========================================================== #define mass_max 200 //定义信息量 struct Massage { int cont; //文件数量 char username[15]; //发送人 char mass[mass_max];//信息 }mas; typedef struct Massage massage; //===================
6、 //========================================================== char userlogin[10]; char sc_name[sc_num][10]; /*以上是学生信息*/ char wele(void);/*用户界面,返回0,那么表示退出系统*/ /* ==================================================================== 学生信息操作 ===========
7、 */ stu*creat();/*建立链表*/ void display(stu *head);/*显示用户信息*/ void insert(stu *head);/*增加学生信息*/ stu* delname(stu*head,char *stu_name);/*根据学生XX删除用户信息*/ stu* delnum(stu *head,char *stu_num);/*根据学生学号删除用户信息*/ stu* checkname(stu *head,char *st
8、u_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);/*检查学生XX是否符合格式*/ c
9、har chekscore(char score);/*检查学生分数是否符合格式*/ stu* sortscore(stu *head);/*学生按平均成绩排序*/ stu* sortnum(stu *head);/*学生信息按学号排序*/ /* ==================================================================== 学生用户登录 ==================================================================== */ char stulogin(void);
10、/*进入普通用户登录界面*/ char stucheck(char *nam,char *stnum);/*查找是否存在该学生信息*/ char newlogin(char *nam,char *stnum);/*注册学生信息*/ void disnewst(void);/*获得学生信息*/ /* ==================================================================== 系统管理选择,管理员权限 =============================================================
11、 */ void stu_system(void);/*对各种操作集中管理*/ void sentmsg(void);/*发送公告*/ char readmsg(void);/*浏览信息*/ char delemsg(void);//删除信息 void chagesbject(void);/*修改课程信息*/ /* ==================================================================== 用户登录信息 ================================================
12、 */ void setlogintime(void);/*记录用户登录时间*/ void dislogintime(void);/*显示用户登录信息*/ void setused(void);/*注册新用户资料*/ char usedcheckname(char *name);/*用户信息检查,假设存在用户,那么返回1,否那么返回0*/ char usedcheckpass(char *name,char *password);/*查看用户名密码是否符合*/ /* ====================================
13、 存储操作 ==================================================================== */ char save(stu *head);/*保存用户数据*/ char disload();/*显示用户信息*/ stu* load(void);/*加载用户数据*/ void clrtxt(char *str);/*去除文本信息*/ char* creat_txt(char *username);/*根据用户名,创立一个用户文件*/ FILE* chek
14、user(char *username);/*根据用户名,查找是否有此用户信息,假设无,返回NULL*/ /* ==================================================================== ---------------main函数---------- ==================================================================== */ void main() { FILE *fp; char i,j; char name[15]; system(
15、"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')) {
16、 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 17、tf("\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[ 18、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=wele();
if(j==1)
{
system("cls");
printf("\t\t欢迎进入学生用户中心系统!");
setlogintime();
j=stulogin(); 19、
}
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) 20、
fp=fopen(stu_msg,"w");
fclose(fp);
}
/*
====================================================================
---------------------------初始化用户界面---------------------------
====================================================================
*/
//返回1,那么进入stu用户界面
//返回0,那么表示退出
//返回2,那么表示进 21、入管理员界面
char wele(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* 22、 *\n");
printf("\t* 1.用户登录 *\n");
printf("\t* *\n");
printf("\t* 2.用户注册 *\n");
printf("\t* 23、 *\n");
printf("\t* 3.管理员登陆 *\n");
printf("\t* *\n");
printf("\t* 4.管理员注册 *\n");
printf("\t* 24、 *\n");
printf("\t* 5.退出系统 *\n");
printf("\t* *\n");
printf("\t=============================================================\n");
printf("\t 25、 请按命令提示操作\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 26、'));
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 27、);
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();
28、 //=======================
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( 29、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);
30、 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(usedcheck 31、pass(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((b 32、ack!='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);
33、 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;
r 34、eturn 0;
}
}
}
return 1;
}
/*
====================================================================
---------------建立链表----------
====================================================================
*/
stu*creat()/*建立链表*/
{
char i,j;
char stu_num;
stu *p1, *p2;
stu *hea 35、d;
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 36、 ");
scanf("%s",p1->num);
while(!cheknum(p1->num))
{
printf("\n\n输入格式错误!请重新输入学号 : ");
scanf("%s",p1->num);
}
printf("\n\n请输入学生XX : ");
scanf("%s",p1->name);
while(!chekname(p1->name))
{
printf("\n\n输入格式出错!不能带数字或下划线!\n");
printf("\n\n请重新输入学生XX: ");
scanf("%s 37、",p1->name);
}
do
{
printf("\n\n请输入学生%s成绩 :",sc_name[j]);
scanf("%d",&p1->score[j]);
while((100 38、>average+=p1->score[j];
j++;
}while(j 39、u),1,fp);
p1=(stu*)malloc(sizeof(stu));
}
display(head);
getchar();
fclose(fp);
return head;
}
/*
====================================================================
检查学生学号是否符合格式,假设正确,那么返回1,否那么返回0
====================================================================
*/
char chekn 40、um(char *num)/*检查学生学号是否符合格式*/
{
char i; /*获取字符串长度*/
char j=strlen(num);
for(i=0;i 41、
====================================================================
*/
char chekname(char *name)/*检查学生XX是否符合格式*/
{
char i;
for(i=0;i 42、n 1;
}
/*
====================================================================
显示学生成绩情况
====================================================================
*/
void display(stu *head)/*显示用户信息*/
{
stu *p1;
char i=0;
p1=head->next;
system("cls");
if(p1!=NULL)
{
while(p1!=NULL) 43、
{
if(i==0)
{
printf("XX\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;
}
44、 getchar();
}
else
{
printf("\t\t\t链表为空!\n\n\n请按回车键继续...\n");
getchar();
}
}
/*
====================================================================
插入学生信息
====================================================================
*/
void insert(stu *head)/*增加学生信息*/
{
stu *p1,*p2;
45、
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请输入学生的XX : ");
s 46、canf("%s",p2->name);
while(!chekname(p2->name))
{
printf("\n\n输入格式出错!不能带数字或下划线!\n");
printf("\n\n请重新输入学生XX: ");
scanf("%s",p2->name);
}
do
{
printf("\n\n请输入学生%s成绩 :",sc_name[j]);
scanf("%d",&p2->score[j]);
while((100 47、
{
printf("\n\n成绩格式出错!\n ");
getchar();
printf("\n\n请重新输入学生成绩 : ");
scanf("%d",&p2->score[j]);
}
p2->average+=p2->score[j];
j++;
}while(j 48、p2;
}
else
{
while(p1->next!=NULL)
p1=p1->next;
p1->next=p2;
p2->next=NULL;
}
display(head);
getchar();
}
/*
====================================================================
删除学生信息
====================================================================
*/
stu* del 49、name(stu*head,char *stu_name)/*根据学生XX删除用户信息*/
{
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你所删除的学生XX为: %s\t学号 50、为:%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;/*删除头部接点*/
}






