计算机综合大作业C语言选课系统.docx
《计算机综合大作业C语言选课系统.docx》由会员分享,可在线阅读,更多相关《计算机综合大作业C语言选课系统.docx(47页珍藏版)》请在冰豆网上搜索。
计算机综合大作业C语言选课系统
东北石油大学
综合应用(c)作业
课程计算机综合应用
题目课程管理系统
院系石油工程学院
专业班级
学生姓名
2014年10月25日
1.系统的功能
(一)管理员:
1.添加功能:
管理员对用户的用户名、密码、用户类型,进行添加工作。
2.修改功能:
管理员对用户的用户名、密码、用户类型,进行修改工作。
3.删除功能:
管理员对用户的用户名、密码、用户类型,进行删除工作。
(二)老师:
1.)添加功能:
老师对课程的添加工作。
2)查询功能:
a.查询全部课程。
b.按照课程的性质(必修或者选修)进行查找并显示。
c.按照课程的编号进行查找并显示。
d.按照课程的学分进行查找并显示。
(三)学生:
1)查询功能:
a查询全部课程。
b.按照课程的性质(必修或者选修)进行查找并显示。
c.按照课程的编号进行查找并显示。
d.按照课程的学分进行查找并显示。
2)选课功能:
必修课学生必选,学生对选修课进行选课。
且选修课学分加必修课学分不少于30分。
已选的选修课放入文件中。
3)退选功能:
学生只能对选修课进行退选,必修课不能退选。
(四)退出系统。
2.界面设计和函数的使用
(1)main函数。
(2)check函数:
检验所输入的类别,用户名和密码是否正确。
(3)she【管理员函数】
管理员调用函数.add,del,edits:
管理员对用户进行添加,删除,编辑的操作。
(4)teacher【教师函数】
教师调用函数addkc;kccxtea【kcxxtea,kccxtea1,kccxtea2,kccxtea3,】依次为教师添加课程,教师查询课程(包括查询全部课程,按照课程名称查询,按照课程性质查询,按照学分查询)
(5),student【学生函数】
学生调用函数
1查询课程函数kccx【kcxx,kccx1,kccx2,kccx3,】
学生查询课程(包括查询全部课程,按照课程名称查询,按照课程性质查询,按照学分查询)
2选课函数choose【调用choosexuanxiu】
必修课学生必选,学生对选修课进行选课。
且选修课学分加必修课学分不少于40分。
已选的选修课放入文件中。
3退课函数tuixuan
学生只能对选修课进行退选,必修课不能退选。
登录界面
管理员界面
教师界面
录入课程界面
查询课程界面
退出系统界面
学生界面
主界面
查询界面
选课界面
查询退课界面
退课界面
3.成员分工
:
choose,choosexuanxiu,tuixuan,cxxx,addkc函数。
:
kccx,kccxtea,kccx2,kccx2tea,kccx3,kcxs函数。
:
kccx1,kccx1tea,kcxs,kcxstea,kccx3tea,kcxstea函数。
:
add,edits,check,del函数及美化工作。
:
main,student,teacher函数及整合工作。
4.程序中的数据结构
1.存放课程信息的结构体
structcouse
{
intnum1;
charname1[20];
intscore;
chartype[20];
};
2.存放用户信息的结构体
structyh
{charname[20];
charpass[10];
intf;
};
5.源代码
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
intM=0;
structcouse//课程信息结构体
{
intnum1;
charname1[20];
intscore;
chartype[20];
};
voidadd()//添加用户
{
charusname[20];
charuspw[10];
intclas;
FILE*fp;
if((fp=fopen("uhn.txt","a"))==NULL)
{
printf("不能打开文件\n");
exit(0);
}
printf("请输入用户名,密码和类别");
gets(usname);
gets(uspw);
scanf("%d",&clas);
getchar();
fprintf(fp,"%s%s%d\n",usname,uspw,clas);
fclose(fp);
}
voiddel(charname[])//删除用户
{structyh
{charname[20];
charpass[10];
intf;
}stdl[100];
FILE*fp;
inti=0,n;
if((fp=fopen("uhn.txt","r"))==NULL)
{printf("不能打开文件\n");
exit(0);
}
while(!
feof(fp))
{fscanf(fp,"%s%s%d",stdl[i].name,stdl[i].pass,&stdl[i].f);
if(strcmp(name,stdl[i].name)!
=0)i++;
}
fclose(fp);
if((fp=fopen("uhn.txt","w"))==NULL)
{printf("不能打开文件\n");
exit(0);
}
for(n=0;n
fprintf(fp,"%s%s%d\n",stdl[n].name,stdl[n].pass,stdl[n].f);
fclose(fp);
}
voidedits(charname[])//修改用户
{structyh
{charname[20];
charpass[10];
intf;
}std1[100];
FILE*fp;
inti=0,n,lb;
charyhm[20],pw[10];
printf("输入修改后的用户名,密码和类别");
gets(yhm);
gets(pw);
scanf("%d",&lb);
if((fp=fopen("uhn.txt","r"))==NULL)
{printf("不能打开文件\n");
exit(0);
}
while(!
feof(fp))
{fscanf(fp,"%s%s%d",std1[i].name,std1[i].pass,&std1[i].f);
if(strcmp(name,std1[i].name)==0)
{strcpy(std1[i].name,yhm);strcpy(std1[i].pass,pw);std1[i].f=lb;}
i++;
}
fclose(fp);
if((fp=fopen("uhn.txt","w"))==NULL)
{printf("不能打开文件\n");
exit(0);
}
for(n=0;nfprintf(fp,"%s%s%d\n",std1[n].name,std1[n].pass,std1[n].f);
fclose(fp);
}
voidshe()//管理员函数
{
intsele,mark;
charusername[20];
charpassword[10];
printf("\n\t************\n管理员系统\n************\n\n");
printf("┏━┓━━━━━━━━━━━━━━━━━━━┏━┓\n");
printf("┃┃用户管理┃┃\n");
printf("┃┗━━━━━━━━━━━━━━━━━━━┛┃\n");
printf("┃●[1]添加用户┃\n");
printf("┃┃\n");
printf("┃●[2]删除用户┃\n");
printf("┃┃\n");
printf("┃●[3]修改用户┃\n");
printf("┃┃\n");
printf("┃●[0]退出系统┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("请选择:
");
do
{
printf("0-3\n");
scanf("%d",&sele);getchar();
switch(sele)
{case1:
printf("输入添加用户的信息\n");add();break;
case2:
printf("输入要删除的用户的信息\n");gets(username);del(username);break;
case3:
printf("输入要修改的用户信息\n");gets(username);edits(username);break;
case0:
exit(0);
default:
printf("0~4\n");
}
}while
(1);
}
intcheck(charna[],charpa[],intcl)
{
charfname[20];
charfpass[10];
FILE*fp;
intfound=0,fclas;
if((fp=fopen("uhn.txt","r"))==NULL)
{
printf("不能打开文件\n");
exit(0);
}
while(!
feof(fp))
{fscanf(fp,"%s%s%d",fname,fpass,&fclas);
if(strcmp(fname,na)==0&&strcmp(fpass,pa)==0&&fclas==cl)
{found=1;break;}
}
fclose(fp);
returnfound;
}
//添加课程函数
voidaddkc()
{
FILE*fp;voidteacher();
inti=0,n;
structcouses[100];
printf("请输入要录入的课程数\n");
scanf("%d",&n);
if((fp=fopen("kecheng.dat","ab+"))==NULL)
{
printf("不能打开文件\n");
exit(0);
}
for(i=0;i{
printf("\n\t请输入课程编号:
");
scanf("%4d",&s[i].num1);
printf("\n\t请输入课程名称:
");
scanf("%s",s[i].name1);
printf("\n\t请输入课程学分:
");
scanf("%4d",&s[i].score);
printf("\n\t请输入课程课程性质:
");
scanf("%s",s[i].type);
fwrite(&s[i],sizeof(structcouse),1,fp);
}
fclose(fp);
printf("\t\t\t继续录入课程请按1返回上一页面请按2\t\n");
scanf("%d",&i);
switch(i)
{
case1:
addkc();break;
case2:
teacher();break;
}
}
voidteacher()//教师主页面
{inti;
voidaddkc();voidkccxtea();
printf("\n\t************\n老师课程系统\n************\n\n");
printf("┏━┓━━━━━━━━━━━━━━━━━━━┏━┓\n");
printf("┃┃教师管理┃┃\n");
printf("┃┗━━━━━━━━━━━━━━━━━━━┛┃\n");
printf("┃●[1]录入课程┃\n");
printf("┃┃\n");
printf("┃●[2]查询课程┃\n");
printf("┃┃\n");
printf("┃●[3]退出系统┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("请选择:
");
scanf("%d",&i);
switch(i)
{
case1:
addkc();;break;
case2:
kccxtea();break;
case3:
exit(0);
}
}
voidstudent()//学生主页面
{intm,i;
voidkccx();voidchoosexuanxiu();voidkcxs();voidtuixuan();voidchoose();voidcxxx();
printf("\n\t************\n学生课程系统\n************\n\n");
printf("┏━┓━━━━━━━━━━━━━━━━━━━┏━┓\n");
printf("┃┃学生主页面┃┃\n");
printf("┃┗━━━━━━━━━━━━━━━━━━━┛┃\n");
printf("┃●[1]课程信息┃\n");
printf("┃┃\n");
printf("┃●[2]查询课程┃\n");
printf("┃┃\n");
printf("┃●[3]学生选课┃\n");
printf("┃┃\n");
printf("┃●[4]查询已选课┃\n");
printf("┃┃\n");
printf("┃●[5]学生退课┃\n");
printf("┃┃\n");
printf("┃●[6]退出系统┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("请选择:
");
scanf("%d",&i);
switch(i)
{
case1:
kcxs();break;
case2:
kccx();break;
case3:
choose();break;
case4:
cxxx();break;
case5:
tuixuan();break;
case6:
exit(0);
}
}
voidkcxstea()//显示所有课程
{
FILE*fp;
structcousecou;
intm;
if((fp=fopen("kecheng.dat","rb"))==NULL)
{printf("cannotopenthisfile.\n");
exit(0);}
while(fread(&cou,sizeof(cou),1,fp)==1)
{/*每读取一个结构体数据,分别输出4个成员*/
printf("课程编号:
%d",cou.num1);
printf("课程名称:
%s",cou.name1);
printf("课程学分:
%ld",cou.score);
printf("课程类型:
%s\n",cou.type);}
fclose(fp);
printf("按任何数字返回上一界面\n");
scanf("%d",&m);
getchar();
teacher();
}
voidkcxs()//显示所有课程
{
FILE*fp;
structcousecou;
intm;
if((fp=fopen("kecheng.dat","rb"))==NULL)
{printf("cannotopenthisfile.\n");
exit(0);}
while(fread(&cou,sizeof(cou),1,fp)==1)
{/*每读取一个结构体数据,分别输出4个成员*/
printf("课程编号:
%d",cou.num1);
printf("课程名称:
%s",cou.name1);
printf("课程学分:
%ld",cou.score);
printf("课程类型:
%s\n",cou.type);}
fclose(fp);
printf("按任意数字返回上一界面\n");
scanf("%d",&m);
getchar();
student();
}
voidkccxtea()//老师课程查询主页面
{
inti,m;
voidkccx1tea();voidkccx2tea();voidteacher();voidkccx3tea();voidkcxstea();
printf("\n\t************\n老师课程系统\n************\n\n");
printf("┏━┓━━━━━━━━━━━━━━━━━━━┏━┓\n");
printf("┃┃查询主页面┃┃\n");
printf("┃┗━━━━━━━━━━━━━━━━━━━┛┃\n");
printf("┃●[0]查询所有课程┃\n");
printf("┃┃\n");
printf("┃●[1]按课程名称查询┃\n");
printf("┃┃\n");
printf("┃●[2]按课程性质查询┃\n");
printf("┃┃\n");
printf("┃●[3]按课程学分查询┃\n");
printf("┃┃\n");
printf("┃●[4]返回到上一页面┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("请选择:
");
scanf("%d",&i);
switch(i)
{
case0:
kcxstea();break;
case1:
kccx1tea();break;
case2:
kccx2tea();break;
case3:
kccx3tea();break;
case4:
teacher();break;
}
}
voidkccx()//学生课程查询主页面
{
inti,m;
voidkccx1();voidkccx2();voidstudent();voidkccx3();voidkcxs();
printf("\n\t************\n学生课程系统\n************\n\n");
printf("┏━┓━━━━━━━━━━━━━━━━━━━┏━┓\n");
printf("┃┃查询主页面┃┃\n");
printf("┃┗━━━━━━━━━━━━━━━━━━━┛┃\n");
printf("┃●[1]按课程名称查询┃\n");
printf("┃┃\n");
printf("┃●[2]按课程性质查询┃\n");
printf("┃┃\n");
printf("┃●[3]按课程学分查询┃\n");
printf("┃┃\n");
printf("┃●[4]返回到上一页面┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("请选择:
");
scanf("%d",&i);
switch(i)
{
case0:
kcxs();break;
case1:
kccx1();break;
case2:
kccx2();break;
case3:
kccx3();break;
case4:
student();break;
}
}
voidkccx1tea()//老师按课程名称查询
{
FILE*fp;
voidkccxtea();
structcouses[100];
charfeature[10];inti=0,t=0,inp;
printf("\n\t************\n老师课程系统\n************\n\n");
printf("请输入所查询的课程名称:
");
getchar();
gets(feature);
if((fp=fopen("kecheng.dat","rb"))==NULL)
{
printf("未输入任何信息,请返回进行课程信息录入!
");
exit(0);
}
do
{
fread(&s[i],sizeof(structcouse),1,fp);
if(strcmp(s[i].name1,feature)==0)
{t=1;
printf("课程编号:
%d",s[i].num1);
printf("课程名称:
%s",s[i].name1);
printf("学分:
%d",s[i].score);
printf("课程性质:
%s\n",s[i].type);
}i++;
}while(!
feof(fp));
if(t==0)printf("Nosuchcourse\n");
fclose(fp);
printf("\n\t************\n老师课程系统\n************\n\n");
printf("┏━┓━━━━━━━━━━━━━━━━━━━┏━┓\n");
printf("┃┃课程页面┃┃\n");
printf("┃┗━━━━━━━━━━━━━━━━━━━┛┃\n");
printf("┃●[1]返回课程查询页面┃\n");
printf("┃┃\n");
printf("┃●[2]退出程序┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("请选择:
");
scanf("%d",&inp);
switch(inp)
{
case1:
{
kccxtea();break;}//返回的是老师的!
!
!