C语言课程设计报告——教务管理系统_c语言课程设计报告
C语言课程设计报告——教务管理系统由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“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
#define ma_key “3110008758” typedef struct student stu;#define sc_num 4
#define uint unsigned int
“d:stu.dat”
//定义文件头部密码
//只设定4门科目,不允许改动
/*学生成绩管理系统结构*/ 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 paword[20];}use;/*时间登录信息*/ struct Logtime { char userlogin[20];struct tm;};char logc;//登录次数
typedef struct Logtime logtime;//============ //定义通讯协议
//============
#define ma_max 200 struct Maage {
//定义信息量
int cont;
//文件数量 char username[15];//发送人
char ma[ma_max];//信息 }mas;typedef struct Maage maage;
//============ //============ 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 usedcheckpa(char *name,char *paword);/*查看用户名密码是否符合*/ /* ====================== 存储操作
====================== */ 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,' ',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,ma_key)!=0){
printf(“文件载入出错!t N为退出 回车键继续...:”);i=getchar();if((i=='n')||(i=='N')){
} else { fclose(fp);exit(1);
} else {
} printf(“nn数据将重新初始化!n”);printf(“nn请输入4门科目名称n”);memset(name,' ',sizeof(name));fwrite(name,sizeof(name),5,fp);strcpy(name,ma_key);rewind(fp);fwrite(name,sizeof(name),1,fp);for(i=0;i
} printf(“nn第%d门科目名称 : ”,i+1);scanf(“%s”,sc_name[i]);
if(fwrite(sc_name[i],sizeof(sc_name[i]),1,fp)!=1){
} printf(“nntttt保存出错!n”);getchar();exit(1);
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(“tt欢迎进入学生用户中心系统!”);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 userpa[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(“nnn”);printf(“nnn”);printf(“您输入的命令为:t”);i=getchar();if((i!='1')&&(i!='2')&&(i!='3')&&(i!='4')&&(i!='5')){ printf(“n输入错误的指令!请按命令提示操作 1-3n”);getchar();} }while((i!='1')&&(i!='2')&&(i!='3')&&(i!='4')&&(i!='5'));switch(i){
case '1': {
system(“cls”);memset(username,' ',sizeof(username));memset(userpa,' ',sizeof(userpa));printf(“nt请输入用户名 :t”);scanf(“%s”,username);printf(“nt请输入学号 :t”);scanf(“%s”,userpa);temp=stucheck(username,userpa);if(temp==0){
} {
} printf(“没有学生档案信息!请注册...n”);getchar();break;else if(temp==1)memset(userlogin,' ',sizeof(userlogin));strcpy(userlogin,username);
printf(“nt学生成绩登录有效!”);getchar();return 1;
getchar();//======================= break;} case '2': {
} system(“cls”);memset(username,' ',sizeof(username));memset(userpa,' ',sizeof(userpa));printf(“nt请输入用户名 :t”);scanf(“%s”,username);printf(“nt请输入学号 :t”);scanf(“%s”,userpa);while(cheknum(userpa)!=1){
printf(“您的输入格式有误,请重新输入!n”);printf(“按回车键继续...n”);getchar();memset(userpa,' ',sizeof(userpa));printf(“nt请输入学号 :t”);scanf(“%s”,userpa);} if(newlogin(username,userpa))printf(“nt注册成功!用户名:%st学号:%s”,username,userpa);getchar();break;case '3': {
do
{
system(“cls”);memset(username,' ',sizeof(username));memset(userpa,' ',sizeof(userpa));printf(“nt请输入用户名 :t”);scanf(“%s”,username);printf(“nt请输入密码 :t”);scanf(“%s”,userpa);if(usedcheckpa(username,userpa)==0){
wrong_cont++;if(wrong_cont==3){ printf(“nt输入次数大于3次!请按回车键退出系统!n”);
getchar();weling=0;return 0;} key=1;printf(“nt按1选择返回主菜单nt按0继续输入用户验证码n”);do {
back=getchar();
if((back!='1')&&(back!='0')){
}
printf(“nt输入错误!按回车键继续...”);getchar();}while((back!='1')&&(back!='0'));if(back=='1')key=0;} else {
key=0;weling =0;system(“cls”);printf(“nntt欢迎%s进入学生管理系统n”,username);memset(userlogin,' ',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(“nn请输入要录入的学生人数: ”);scanf(“%d”,&stu_num);for(i=0;i
system(“cls”);p1->average=0;printf(“nn请输入学生学号: ”);scanf(“%s”,p1->num);while(!cheknum(p1->num)){ printf(“nn输入格式错误!请重新输入学号 : ”);scanf(“%s”,p1->num);} printf(“nn请输入学生姓名 : ”);scanf(“%s”,p1->name);while(!chekname(p1->name)){ printf(“nn输入格式出错!不能带数字或下划线!n”);
printf(“nn请重新输入学生姓名: ”);scanf(“%s”,p1->name);}
do
{
printf(“nn请输入学生%s成绩 :”,sc_name[j]);
scanf(“%d”,&p1->score[j]);
while((100
score[j])||(p1->score[j]
{
printf(“nn成绩格式出错!n ”);getchar();printf(“nn请重新输入学生成绩 : ”);scanf(“%d”,&p1->score[j]);
} p1->average+=p1->score[j];j++;}while(javerage=p1->average/4;if(i==0)
/*分清楚是head->next=p还是
{
head->next=p1;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
} if(('0'>num[i])||('9'
}
/* ====================== 显示学生成绩情况
====================== */ void display(stu *head)/*显示用户信息*/ { for(i=0;i
} /*if(('A'>name[i])||(('Z'name[i]))||('z'next;system(“cls”);if(p1!=NULL){
while(p1!=NULL)
{
if(i==0)
{
printf(“姓名t学号t
%st
%st
%st%st
平均n”,sc_name[0],sc_name[1],sc_name[2],sc_name[3]);
i++;
}
printf(“%st%st %dt %dt%dt%dt%dn”,p1->name,p1->num,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->average);
p1=p1->next;
}
getchar();} else {
printf(“ttt链表为空!nnn请按回车键继续...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(“nn请输入要增加的学生学号: ”);
scanf(“%s”,p2->num);
while(!cheknum(p2->num)){
分
printf(“nn输入格式错误!请重新输入学号 : ”);scanf(“%s”,p2->num);} printf(“nn请输入学生的姓名 : ”);scanf(“%s”,p2->name);while(!chekname(p2->name)){
}
do
{
printf(“nn请输入学生%s成绩 :”,sc_name[j]);
scanf(“%d”,&p2->score[j]);while((100
score[j])||(p2->score[j]
{
printf(“nn成绩格式出错!n ”);getchar();printf(“nn请重新输入学生成绩 : ”);scanf(“%d”,&p2->score[j]);printf(“nn输入格式出错!不能带数字或下划线!n”);printf(“nn请重新输入学生姓名: ”);scanf(“%s”,p2->name);} p2->average+=p2->score[j];j++;}while(javerage=p2->average/4;if(head->next==NULL){
} else {
} while(p1->next!=NULL)p1=p1->next;p1->next=p2;p2->next=NULL;printf(“n原链表为空!”);getchar();head->next=p2;display(head);getchar();} /* ====================== 删除学生信息
====================== */ stu* delname(stu*head,char *stu_name)/*根据学生姓名删除用户信息*/ {
stu *p1,*p2;char i,j=0;system(“cls”);if(head->next==NULL){ printf(“nn没有学生信息!t操作错误!n”);return head;} p1=head->next;p2=p1;while(p1!=NULL){
if(strcmp(p1->name,stu_name)==0){
printf(“nn你所删除的学生姓名为: %st学号为:%sn”,p1->name,p1->num);printf(“nn确定为:y,取消为nt:”);i=getchar();
while(!((i=='y')||(i=='Y')||(i=='n')||(i=='N'))){
printf(“nn输入错误!t请重新输入 :”);} i=getchar();if((i=='y')||(i=='Y')){ if(j==0)
} { } else { } printf(“nntttt成功删除用户信息!nnttt按回车键继续...n”);free(p1);return head;p2->next=p1->next;head->next=p1->next;/*删除头部接点*/ else { return head;
}
} } j++;p2=p1;p1=p1->next;} printf(“nntt没有此用户记录信息!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(“nntt没有存储学生信息!nntt操作错误!n”);return head;} p1=head->next;p2=p1;while(p1->next!=NULL){
if(strcmp(p1->num,stu_num)==0){
printf(“nn你所删除的学生姓名为: %st学号为:%sn”,p1->name,p1->num);printf(“nn确定为:y,取消为nt:”);i=getchar();
{
} while(!((i=='y')||(i=='Y')||(i=='n')||(i=='N')))printf(“nn输入错误!t请重新输入 :”);i=getchar();
}
}
if((i=='y')||(i=='Y')){
} if(j==0){ head->next=p1->next;} else { }
printf(“nntttt成功删除用户信息!nnttt按回车键继续...n”);free(p1);return head;p2->next=p1->next;else
return head;} p2=p1;p1=p1->next;j++;printf(“nn没有此用户信息!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(“nntt没有存储学生信息!t操作错误!n”);getchar();return head;
} } p1=head;while(p1->next!=NULL){ if(strcmp(p1->name,stu_name)==0)
{
printf(“nn你所查找的学生信息如下n”);printf(“ nn%st学号为:%sn”,p1->name,p1->num);printf(“姓名t学号tt %st %st %st%st平均分 n”, sc_name[0],sc_name[1],sc_name[2],sc_name[3]);printf(“%st%stt %dt %dt%dt%dt%dn”,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(“nntt找不到相关用户信息!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(“nntt没有存储学生信息!t操作错误!n”);return head;} p1=head;
} while(p1->next!=NULL){
p1->name,p1->num,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->average);
getchar();return p1;if(strcmp(p1->num,stu_num)==0){
printf(“nn你所查找的学生信息如下n”);printf(“ %st学号为:%sn”,p1->name,p1->num);printf(“姓名t学号tt %st %st %st%st平均分 n”, sc_name[0],sc_name[1],sc_name[2],sc_name[3]);printf(“%st%stt %dt %dt%dt%dt%dn”, } p1=p1->next;} printf(“nntt找不到相关用户信息!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(“nn请输入学生新的学号: ”);scanf(“%s”,p->num);while(!cheknum(p->num)){ printf(“nn输入格式错误!请重新输入学号 :n ”);scanf(“%s”,p->num);}
do
}
{
printf(“nn请输入学生成绩%s :”,sc_name[j]);
scanf(“%d”,&p->score[j]);while((100
score[j])||(p->score[j]
{
j++;
} printf(“nn成绩格式出错!n ”);getchar();printf(“nn请重新输入学生成绩 : ”);scanf(“%d”,&p->score[j]);
p->average+=p->score[j];
}while(j
p->average=p->average/4;
printf(“nntt用户数据更新完毕!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(“nn请输入学生姓名: ”);scanf(“%s”,p2->name);while(!chekname(p2->name)){ printf(“nn输入格式错误!请重新输入学号 : ”);scanf(“%s”,p2->name);}
do
{
}
printf(“nn请输入学生成绩%s :”,sc_name[j]);
scanf(“%d”,&p2->score[j]);while((100
score[j])||(p2->score[j]
{
printf(“nn成绩格式出错!n ”);
j++;
} getchar();printf(“nn请重新输入学生成绩 : ”);scanf(“%d”,&p2->score[j]);
p2->average+=p2->score[j];
}while(j
p2->average=p2->average/4;
printf(“nntt用户数据更新完毕!请按回车键退出...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(“nnttt没有数据信息可载入!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(“%st%st %dt %dt%dt%dt%dn”,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(“nttt文件中不含学生信息!nttt按回车键继续...n”);getchar();} else {
} printf(“nttt一共记录了%d名学生信息!nttt按回车键继续...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){
} else { printf(“没有保存数据!n”);getchar();fclose(fp);return 0;
} 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){
} else {
} printf(“nntt无法创建用户文件!nntt请按回车键继续...n”);getchar();fclose(fp);return name;//printf(“nn文件路径为:%snn”,name);//printf(“nntt用户文件创建成功!nntt请按回车键继续...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(“nt无此文件!”);getchar();} else {
fclose(fp);fp=fopen(str,“w”);memset(clrmem,' ',sizeof(clrmem));rewind(fp);for(i=0;i
if(fwrite(clrmem,sizeof(clrmem),1,fp)!=1){
if(j==0){ printf(“nntt文件清除失败!nntt请按回车键继续...n”);getchar();break;} else { //printf(“nntt文件清除成功!nntt请按回车键继续...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(“nnntt登陆时间为:ntt%d年 %d月 %d日 %d时 %d分 %d秒nnn”, y, m, fclose(fp);d,hour,min,sec);====================== 用户登录信息
====================== */ 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){
} else { memset(name,' ',sizeof(name));while(fread(name,sizeof(name),1,fp)==1){ fread(timeinfo,sizeof(struct tm),1,fp);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;
// 年份ins // 月份 // 日期 printf(“nntt找不到文件信息!nntt按回车键继续...n”);getchar();i++;printf(“nt第%d次登陆时间为:%d年 %d月 %d日 %d时 %d分 %d秒t%s用户登录”,i,y, m, d,hour,min,sec,name);
} memset(name,' ',sizeof(name));} if(i==0)printf(“n没有记录用户登录时间!n”);getchar();free(timeinfo);fclose(fp);} /* ====================== 用户登录信息
====================== */ void setused(void)/*注册新用户资料*/ {
FILE *fp;char chekpaword[20];char lgway[20];char i=0;system(“cls”);memset(use.paword,' ',sizeof(use.paword));memset(chekpaword,' ',sizeof(chekpaword));memset(use.username,' ',sizeof(use.username));do{ printf(“nn请输入用户名:t”);scanf(“%s”,use.username);printf(“nn请输入用户密码:t”);scanf(“%s”,use.paword);printf(“nn请再次输入密码:t”);scanf(“%s”,chekpaword);if(strcmp(use.paword,chekpaword)!=0){
printf(“nntt密码不匹配!n按回车键继续n”);getchar();i=1;memset(use.paword,' ',sizeof(use.paword));memset(chekpaword,' ',sizeof(chekpaword));memset(use.username,' ',sizeof(use.username));
//10检查用户密码输入
} 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,' ',sizeof(use.username));memset(use.paword,' ',sizeof(use.paword));fscanf(fp,“%s%s”,use.username,use.paword);/////////////////////////////////此处写有问题!
//fread(&use,sizeof(use),1,fp);
//printf(“您保存的用户名为:%sn”,use.username);
} /*
} else {
} else {
//printf(“您保存的密码是:%sn”,use.paword);//printf(“nntt数据保存成功!n按回车键继续...n”);//getchar();fclose(fp);printf(“n数据保存失败!n按回车键继续...n”);getchar();fclose(fp);} 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){
} else { printf(“nntt用户名输入错误!nntt请按回车键继续...n”);getchar();fclose(fp);return 1;
return 0;} } /* ====================== 检查输入密码是否正确
====================== */ char usedcheckpa(char *user,char *pa)/*查看用户名密码是否符合*/ {
char filename[20];FILE *fp;memset(filename,' ',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文件名为:%sn”,filename);getchar();memset(use.username,' ',sizeof(use.username));memset(use.paword,' ',sizeof(use.paword));if(fp==NULL){
printf(“nntt用户名错误!nntt请按回车键继续...n”);getchar();fclose(fp);return 0;} rewind(fp);fread(&use,sizeof(use),1,fp);//printf(“用户名:%st密码:%sn”,use.username,use.paword);//getchar();if(strcmp(use.paword,pa)==0){
system(“cls”);printf(“nntt密码输入正确!nntt请按回车键继续...n”);getchar();fclose(fp);return 1;
} /* } else { printf(“nntt密码输入错误!nntt请按回车键继续...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){
} while(!quet){ do{ system(“cls”);printf(“tt学生成绩管理系统ttt管理员%s登录n”,userlogin);printf(“t==============n”);printf(“t||tt0.修改课程信息n”);system(“cls”);printf(“数表为空,请至少输入一个学生信息!n”);head=creat();
printf(“t||n”);printf(“t||tt1.查看学生信息tt2.增加学生信息n”);printf(“t||n”);printf(“t||tt3.删除学生信息tt4.修改学生信息n”);printf(“t||n”);printf(“t||tt5.查找学生信息tt6.广播信息管理n”);printf(“t||n”);printf(“t||tt7.历史登录信息tt8.注销用户信息n”);printf(“t||n”);printf(“t||tt9.整理学生信息tta.退出系统n”);printf(“t==============n”);printf(“tttttt请按命令操作n”);printf(“您输入的命令是:t”);i=getchar();if(!((i>='0')||(i='0')||(i
case '0': { chagesbject();break;} case '1': {
} system(“cls”);printf(“姓名t学号t %st %st %st%st平均分 n”, sc_name[0],sc_name[1],sc_name[2],sc_name[3]);disload(head);printf(“nntt按回车键返回...nn”);getchar();break;case '2': {
system(“cls”);printf(“n请输入要增加学生的个数:t”);scanf(“%d”,&insert_num);for(temp[2]=0;temp[2]
break;} case '3': { do
{ system(“cls”);display(head);printf(“t==============================”);printf(“nt请输入删除方式:t”);printf(“nt1.以学号方式”);printf(“nt2.以姓名方式”);printf(“nt3.退出”);printf(“nt==============================”);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'){
} else {
memset(str3,' ',sizeof(str3));printf(“n请输入您要删除的学生姓名:t”);scanf(“%s”,str3);head=delname(head,str3);system(“cls”);display(head);save(head);getchar();memset(str3,' ',sizeof(str3));printf(“n请输入您要删除的学生学号:t”);scanf(“%s”,str3);head=delnum(head,str3);system(“cls”);display(head);save(head);getchar();
} break;} case '4': {
do { system(“cls”);display(head);printf(“==============================”);printf(“nt请输入修改方式:t”);printf(“nt1.以学号方式”);printf(“nt2.以姓名方式”);printf(“nt3.退出”);printf(“n==============================”);printf(“nnnnn”);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,' ',sizeof(str3));printf(“n请输入您要修改的学生学号:t”);scanf(“%s”,str3);changsc_num(head,str3);save(head);else if(temp[4]=='2'){
memset(str3,' ',sizeof(str3));printf(“n请输入您要修改的学生姓名:t”);scanf(“%s”,str3);changsc_name(head,str3);save(head);} break;} case '5': {
} {
do { system(“cls”);printf(“t==============================”);printf(“ntt请输入查找方式:t”);printf(“ntt1.以学号方式”);printf(“ntt2.以姓名方式”);printf(“ntt3.退出”);printf(“tn==============================”);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,' ',sizeof(str3));printf(“n请输入您要查找的学生学号:t”);scanf(“%s”,str3);checknum(head,str3);getchar();} else if(temp[5]=='2'){ memset(str3,' ',sizeof(str3));printf(“n请输入您要查找的学生姓名:t”);scanf(“%s”,str3);
checkname(head,str3);
getchar();} break;case '6': do { system(“cls”);printf(“t==============================”);printf(“nt请输入信息管理操作:n”);printf(“nt1.发布公告n”);
} printf(“nt2.删除信息n”);printf(“nt3.查看信息n”);printf(“nt4.退出”);printf(“nt==============================”);printf(“n”);printf(“您的选择是: t”);temp[6]=getchar();if(!((temp[6]>'0')&&(temp[6]
printf(“n您的输入格式不正确,请重新输入!n按回车键继续...”);getchar();} }while(!((temp[6]>'0')&&(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': {
} case '9': {
do { system(“cls”);printf(“t==============================”);printf(“nt请输入信息管理操作:n”);printf(“nt1.学号排序n”);printf(“nt2.平均分信息n”);printf(“nt3.退出”);printf(“nt==============================”);printf(“n”);printf(“您的选择是: t”);temp[9]=getchar();if(!((temp[9]>'0')&&(temp[9]
//先退出系统,然后进入用户登录界面
} }while(!((temp[9]>'0')&&(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(“nnt您将退出教务管理系统...n”);printf(“nntY:确认退出ttN:返回n”);printf(“nnn”);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;maage *msg;//定义信息载体 char key,i,logout=0;while(!logout){ do { system(“cls”);printf(“
%s学生登录n”,userlogin);printf(“t=============================================n”);printf(“tt欢迎进入学生信息中心n”);printf(“n”);printf(“tt1.查看学生信息n”);printf(“n”);printf(“tt2.给管理员留言n”);printf(“n”);printf(“tt3.查看广播n”);printf(“n”);printf(“tt4.发送广播n”);printf(“n”);printf(“tt5.查看公告n”);printf(“n”);printf(“tt6.注销用户n”);printf(“t=============================================n”);printf(“
请按数字进行菜单选择n”);printf(“n您的选择是:t”);key=getchar();if(!((key>'0')&&(key
} printf(“n您的输入有误,请重新输入!”);printf(“nn请按回车键继续...”);getchar();
//如果不是选择退出
}while(!((key>'0')&&(key
} case '2': {
system(“cls”);msg=(maage*)malloc(sizeof(maage));
memset(msg->username,' ',sizeof(msg->username));//清除数组内容 strcpy(msg->username,“学生”);strcpy(msg->username,userlogin);
//加载用户名 printf(“n您最大能留言的字数不超过ma_max个英文字符”);printf(“nnt请输入您要留言的信息,按回车键结束:t”);scanf(“%s”,msg->ma);fp=fopen(manager,“a+”);fwrite(msg,sizeof(maage),1,fp);fclose(fp);
printf(“n留言成功!按回车键继续...”);getchar();getchar();free(msg);
//结束操作 disnewst();getchar();getchar();break;
//显示学生信息
break;} case '3': {
system(“cls”);msg=(maage*)malloc(sizeof(maage));fp=fopen(share,“r”);memset(msg,' ',sizeof(maage));//清除信息内容 going[5]=1;rewind(fp);while((fread(msg,sizeof(maage),1,fp)!=0)){ printf(“%s用户:t”,msg->username);printf(“%s:nn”,msg->ma);
//结束操作 } fclose(fp);
printf(“n退出成功!按回车键继续...”);
} getchar();getchar();free(msg);break;case '4': {
} system(“cls”);msg=(maage*)malloc(sizeof(maage));
memset(msg->username,' ',sizeof(msg->username));//清除数组内容 strcpy(msg->username,“学生”);strcpy(msg->username,userlogin);
//加载用户名
system(“cls”);printf(“nt您最大能留言的字数不能超过200个英文字符”);printf(“nn请输入您要留言的信息,按回车键结束:t”);scanf(“%s”,msg->ma);fp=fopen(share,“a+”);fwrite(msg,sizeof(maage),1,fp);fclose(fp);
//结束操作
printf(“n信息发送成功!按回车键继续...”);getchar();getchar();free(msg);break;case '5': {
system(“cls”);msg=(maage*)malloc(sizeof(maage));fp=fopen(outmsg,“r”);memset(msg,' ',sizeof(maage));//清除信息内容 going[5]=1;rewind(fp);while((fread(msg,sizeof(maage),1,fp)!=0)){ printf(“%s用户:t”,msg->username);printf(“%s:nn”,msg->ma);
//结束操作 } fclose(fp);printf(“n退出成功!按回车键继续...”);getchar();getchar();free(msg);break;
}
} } } case '6': { system(“cls”);do{
} printf(“ntt您将退出学生用户中心n”);printf(“nttY:确认tN:取消”);printf(“nn您的选择是: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){
} rewind(fp);while((fread(st,sizeof(stu),1,fp))==1){ if((strcmp(st->name,nam)==0)&&(strcmp(st->num,stnum)==0))/*核实用户名和学号printf(“ntt没有用户数据!请重新注册用户信息...”);getchar();return 0;是否正确*/
{
memset(userlogin,' ',sizeof(userlogin));
} strcpy(userlogin,st->name);
/*存在该学生用户,保存用户姓名*/
}
printf(“ntt用户存在!请按回车键继续...”);getchar();fclose(fp);
return 1;
/*关闭学生文件*/
/*操作成功*/ if(strcmp(st->name,nam)==0){
} printf(“ntt用户名存在,学号错误!请按回车键继续...n”);getchar();fclose(fp);return 2;} fclose(fp);printf(“ntt学生用户不存在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(“ntt%s信息将被注册...”,nam);getchar();memset(st->num,' ',sizeof(st->num));memset(st->name,' ',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,' ',sizeof(userlogin));
strcpy(userlogin,st->name);
fp=fopen(stu_msg,“a”);
printf(“ntt%s信息将被注册...”);
memset(st->num,' ',sizeof(st->num));
memset(st->name,' ',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 %st %st %st%st平均分 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;
/*已找到用户信息*/ /*退出循环*/
} else { temp=0;
full =0;temp =1;} } else { temp=0;} }while(temp);if(full==1){ printf(“%st%st %dt %dt%dt%dt%dn”,p->name,p->num,p->score[0],p->score[1],p->score[2],p->score[3],p->average);} getchar();else { printf(“nntt找不到学生用户信息!按回车键继续...”);
} /* getchar();getchar();} fclose(fp);
/*关闭文件信息*/ ====================== 发送公告
====================== */ void sentmsg(void)/*发送公告*/ {
} /* ====================== 浏览公告
====================== */ char readmsg(void)/*浏览信息*/ { FILE *fp;maage *msg;FILE *fp;maage *msg;int i=0;fp=fopen(outmsg,“a+”);if(fp==NULL){ } fp=fopen(outmsg,“w+”);msg=(maage*)malloc(sizeof(maage));system(“cls”);printf(“nn请输入您要公布的信息,按回车键结束:t”);memset(msg,' ',sizeof(maage));//清除 scanf(“%s”,msg->ma);strcpy(msg->username,“管理员”);strcpy(msg->username,userlogin);fwrite(msg,sizeof(maage),1,fp);printf(“nn公告发布成功!”);getchar();getchar();free(msg);fclose(fp);
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(“tttt请按照提示选择nn”);printf(“nn您的选择是:t”);key=getchar();if(!((key>'0')&&(key'0')&&(key
case '1': { fp=fopen(manager,“r”);
msg=(maage*)malloc(sizeof(maage));memset(msg,' ',sizeof(maage));rewind(fp);while((fread(msg,sizeof(maage),1,fp)==1)){
} printf(“%s用户:t”,msg->username);printf(“%sn”,msg->ma);memset(msg,' ',sizeof(maage));getchar();getchar();free(msg);fclose(fp);return 1;
break;} case '2': { msg=(maage*)malloc(sizeof(maage));
} fp=fopen(share,“r”);memset(msg,' ',sizeof(maage));//清除信息内容 rewind(fp);while((fread(msg,sizeof(maage),1,fp))!=0){ printf(“%s用户:t”,msg->username);printf(“%s:nn”,msg->ma);
} fclose(fp);printf(“nn信息读取完毕!按回车键继续...”);//结束操作 getchar();getchar();free(msg);return 1;break;case '3': { fp=fopen(outmsg,“r”);msg=(maage*)malloc(sizeof(maage));
memset(msg,' ',sizeof(maage));rewind(fp);while((fread(msg,sizeof(maage),1,fp)==1)&&temp){ printf(“%s用户:t”,msg->username);printf(“%sn”,msg->ma);memset(msg,' ',sizeof(maage));} getchar();getchar();free(msg);fclose(fp);return 1;break;} case '4': { return 0;break;
}
/* } } ====================== 浏览公告
====================== */ char delemsg(void)//删除信息 {
FILE *fp;maage *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(“tttt请按照提示选择nn”);printf(“nn您的选择是:t”);key=getchar();if(!((key>'0')&&(key
printf(“n您的输入有误,请按回车键继续...n”);getchar();} }while(!((key>'0')&&(key