功能说明:实现两种权限的身份登陆的教务管理系统
*/
#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;
}
目录摘要2一系统分析3二系统设计3三具体模块划分431登录模块432退出模块533母版模块534学生管理模块635教师管理模块83…
课程设计报告课程设计题目教务管理系统学生姓名王丙焱专业计算机科学与技术学号20xx30050202班级1130502指导教师李丽华…
XX大学XXXX学院课程设计课题题目学部专业班级X班学号姓名指导老师20xx年6月23日成绩一系统功能分析与设计1需求分析制作教务…
教务管理系统设计报告一引言教务管理是高校中一项极其繁重的任务教务工作人员每天都需要接触和处理大量的数据和事务这些信息的准确性和完整…
软件数据库设计一引言1编写目的编写本数据库的目的在于有利于后期的维护其主要读者为后期的系统维护人员以便于他们在维护时方便地掌握原数…
数据库系统课程设计学生姓名班学号指导教师洛阳理工学院20xx年6月17日教务管理系统1需求分析11信息要求教务管理系统涉及的实体有…
系统需求分析报告关于宝鸡文理学院教务系统需求分析1引言1111编写目的级软件工程吴飞龙教务管理是大学的主要日常管理工作之一涉及到校…
系统需求分析报告1引言11编写目的教务管理是大学的主要日常管理工作之一涉及到校系师生的诸多方面随着教学体制的不断改革尤其是学分制选…
数据库基础与应用设计报告设计题目专业电子商务学生姓名朱莉班级087班学号083620xx14指导老师査月霞江苏城市职业学院大丰办学…
教务管理系统需求分析11编写目的教务管理是大学的主要日常管理工作之一涉及到校系师生的诸多方面随着教学体制的不断改革尤其是学分制选课…
目录一.选题的背景在现代社会中管理的作用越来越显得重要和突出。一般来讲,管理通过计划、组织、指导与领导、控制等手段,为组织制定目标…