C语言课程设计报告教务管理系统.docx
《C语言课程设计报告教务管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告教务管理系统.docx(93页珍藏版)》请在冰豆网上搜索。
C语言课程设计报告教务管理系统
功能说明:
实现两种权限的身份登陆的教务管理系统
*/
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"time.h"
#include"memory.h"
#defineshare"d:
\\share.dat"//定义邮件地址
#definemanager"d:
\\manager.dat"//定义管理员邮件地址
#defineoutmsg"d:
\\outmsg.dat"//定义公告邮件地址
#definelogtimemsg"d:
\\usedlogintime.dat"//定义用户登录时间信息
#definestar_stu"d:
\\stu_scname.dat"//定义学生起始文件信息
#definestu_msg"d:
\\stu.dat"//定义学生成绩信息地址
#definemass_key"58"//定义文件头部密码
typedefstructstudentstu;
#definesc_num4//只设定4门科目,不允许改动
#defineuintunsignedint
/*学生成绩管理系统结构*/
structstudent
{
charnum[10];/*学生学号*/
charname[10];/*学生姓名*/
uintscore[sc_num];/*科目分数*/
uintaverage;/*科目平均分*/
stu*next;
}st;
chargettemp=0;
/*管理员身份识别结构*/
typedefstructusernameuser;
structusername
{
charusername[20];//
charpassword[20];
}use;
/*时间登录信息*/
structLogtime
{
charuserlogin[20];
structtm;
};
charlogc;//登录次数
typedefstructLogtimelogtime;
//==========================================================
//定义通讯协议
//==========================================================
#definemass_max200//定义信息量
structMassage
{
intcont;//文件数量
charusername[15];//发送人
charmass[mass_max];//信息
}mas;
typedefstructMassagemassage;
//==========================================================
//==========================================================
charuserlogin[10];
charsc_name[sc_num][10];
/*以上是学生信息*/
charwelcome(void);/*用户界面,返回0,则表示退出系统*/
/*
====================================================================
学生信息操作
====================================================================
*/
stu*creat();/*建立链表*/
voiddisplay(stu*head);/*显示用户信息*/
voidinsert(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);/*输出指定学生学号的学生信息*/
voidchangsc_name(stu*head,char*name);/*修改用户成绩*/
voidchangsc_num(stu*head,char*num);/*修改用户成绩*/
voidwaring(void);/*产生警告信息*/
charcheknum(char*num);/*检查学生学号是否符合格式*/
charchekname(char*name);/*检查学生姓名是否符合格式*/
charchekscore(charscore);/*检查学生分数是否符合格式*/
stu*sortscore(stu*head);/*学生按平均成绩排序*/
stu*sortnum(stu*head);/*学生信息按学号排序*/
/*
====================================================================
学生用户登录
====================================================================
*/
charstulogin(void);/*进入普通用户登录界面*/
charstucheck(char*nam,char*stnum);/*查找是否存在该学生信息*/
charnewlogin(char*nam,char*stnum);/*注册学生信息*/
voiddisnewst(void);/*获得学生信息*/
/*
====================================================================
系统管理选择,管理员权限
====================================================================
*/
voidstu_system(void);/*对各种操作集中管理*/
voidsentmsg(void);/*发送公告*/
charreadmsg(void);/*浏览信息*/
chardelemsg(void);//删除信息
voidchagesbject(void);/*修改课程信息*/
/*
====================================================================
用户登录信息
====================================================================
*/
voidsetlogintime(void);/*记录用户登录时间*/
voiddislogintime(void);/*显示用户登录信息*/
voidsetused(void);/*注册新用户资料*/
charusedcheckname(char*name);/*用户信息检查,若存在用户,则返回1,否则返回0*/
charusedcheckpass(char*name,char*password);/*查看用户名密码是否符合*/
/*
====================================================================
存储操作
====================================================================
*/
charsave(stu*head);/*保存用户数据*/
chardisload();/*显示用户信息*/
stu*load(void);/*加载用户数据*/
voidclrtxt(char*str);/*清除文本信息*/
char*creat_txt(char*username);/*根据用户名,创建一个用户文件*/
FILE*chekuser(char*username);/*根据用户名,查找是否有此用户信息,若无,返回NULL*/
/*
====================================================================
---------------main函数----------
====================================================================
*/
voidmain()
{
FILE*fp;
chari,j;
charname[15];
system("colorb5");
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("文件载入出错!
\tN为退出回车键继续...:
");
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{
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();
}
elseif(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,则表示进入管理员界面
charwelcome(void)
{
charusername[20];
charuserpass[20];
chari,wrong_cont=0,key=0,weling=1,back=0;
chartemp;
system("colorb5");
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;
}
elseif(temp==1)
{
memset(userlogin,'\0',sizeof(userlogin));
strcpy(userlogin,username);
printf("\n\t学生成绩登录有效!
");
getchar();
return1;
}
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;
return0;
}
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);//记录用户登录信息
return2;
}
}while(key);
back=0;
weling=1;
break;
return2;
}
case'4':
{
setused();/*注册新管理员资料*/
weling=1;
break;
}
case'5':
{
weling=0;
return0;
}
}
}
return1;
}
/*
====================================================================
---------------建立链表----------
====================================================================
*/
stu*creat()/*建立链表*/
{
chari,j;
charstu_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{
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输入格式出错!
不能带数