*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2015年春季学期
课程设计
题 目: 学生选课系统 专业班级:信息与计算科学 姓 名:学 号:指导教师: 张墨逸 成 绩:______________
前 言
数据库是从60年代初发展起来的计算机技术。经过四十来年的发展,数据库技术己经趋于成熟。Web 数据库在新的Internet 环境中发生了很大的变化。就数据应用而言呈现出多样化的空间,如数字图书馆、电子出版物、电子商务、远程教育系统等的出现,给web 数据库技术提出了更多、更高的要求。同时,随着国内高校校园网的建设,基于互联网的应用系统的开发正在蓬勃发展并发挥着较大的作用。例如,我国许多高校的网上招生系统,学校的各种管理信息系统,学校选课系统,还有一些医学院校开发出的网上诊所、远程诊断系统
等等,都是基于校园网的应用系统。
国外的教学科研软件与国内相比开发的早而且比较成熟。早在七十年代末,美国就建成了NSFNET(国家科学基金网) ,其课题的申报及课题的进展情况汇报都在网上进行。其网上教学教务管理系统也十分完善,世界各地的学生可以坐在家里通过互联网完成入学报名、选课、考试、毕业论文、取得学位这一学习生活的全过程。目前,国际上已具规模的远程教育学校就有数百所之多,网上教育正在各地发挥着巨大的作用,为世界各国培养出大批人才。
所有这些都表明,基于Internet 的校园网的应用已深入到校园内的各个方面。
摘 要
建立一个“学生选课系统”,系统以菜单的方式工作。编写存放的程序包含被选课的信息,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息。学校管理员首先录入可供学生选择的课程,然后学生可按要求(如总学分不得少于30)自由选课。通过子函数的编写,能对这些课程信息进行录入,浏览,查询,修改,选择功能。并将这些信息存入文件中。最后录入课程信息,进行测试,实现程序运行。
关键词:学生选课,选修学分,授课学时,课程信息,课程添加
目 录
1题目要求........................................................................................................................................ 1 2需求分析........................................................................................................................................ 1 2.1 产品需求概述........................................................................................................................ 1 2.1.1 功能简介......................................................................................................................... 1 2.1.2 运行环境......................................................................................................................... 1 2.2 功能需求 ............................................................................................................................... 2 2.2.1添加课程功能 . ................................................................................................................. 2 2.2.2 删除课程功能 . ................................................................................................................ 2 2.2.3 查询功能......................................................................................................................... 2 2.2.4学生选课功能 . ................................................................................................................. 2 2.2.5学生查看已选课程功能 . ................................................................................................. 2 2.2.6学生删除已选课程功能 . ................................................................................................. 2 2.2.7不支持的功能 . ................................................................................................................. 2 2.3 数据描述 ............................................................................................................................... 3 3概要设计.................................................................................................................................... 3 3.1 系统体系结构图 . ................................................................................................................... 3 3.1.1 模块描述......................................................................................................................... 4 4详细设计.................................................................................................................................... 5 4.1 系统主要函数说明 . ............................................................................................................... 5 4.2菜单函数 ................................................................................................................................ 5 4.3添加课程函数......................................................................................................................... 6 4.4删除课程函数......................................................................................................................... 7 4.5查看课程函数......................................................................................................................... 8 4.6选课函数 ................................................................................................................................ 9 5 系统测试..................................................................................................................................... 10 5.1主菜单 .................................................................................................................................. 11 5.2以管理员身份登录 . .................................................................................................................. 5.2.1添加课程信息 . ................................................................................................................... 5.2.2浏览课程信息 . ................................................................................................................... 5.2.3查询课程信息 . ................................................................................................................... 5.2.4删除课程信息 . ............................................................................................................... 14 5.3以学生身份登录 . .............................................................................................................. 15 5.3.1浏览所有课程 . ............................................................................................................... 16 5.3.2选择选修课程 . ............................................................................................................... 16 参考文献 ........................................................................................................................................ 16 致 谢 ................................................................................................................................................ 附录: ............................................................................................................................................ 22 源程序 ............................................................................................................................................ 22
1题目要求
(1)以学校教务管理系统选课系统为背景,通过调研、分析现有的选课模式和选课软件,建立系统模型;
(2)完成软件结构设计、算法设计以及备选课程的录入工作; (3)完成系统软件开发和测试工作; (4)撰写设计说明书; (5)做好答辩工作。
2需求分析
2.1 产品需求概述
2.1.1 功能简介
随着教育科技的进步,原始的选课方式已经不能满足当今社会大学生选课的需求,该系统主要针对选课的大学生,可以使大学生按要求自由选课。每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息。“学生选课系统”可以实现以下功能:
(1)系统以菜单方式工作;
(2)课程信息录入功能(课程信息用文件保存) ; (3)课程信息浏览功能;
(4)查询功能:按学分查询、按课程性质查询、学生已选课信息查询; (5)信息的删除与修改等功能。 2.1.2 运行环境
最低配置:Windows xp系统,推荐配置:Windows 7系统; 运行环境:VC++6.0
2.2 功能需求
功能需求描述系统特性,即产品所提供的主要服务。 2.2.1添加课程功能
课程信息录入功能可以由管理员进入,管理员打开录入界面,可以根据提示进行课程的录入工作,例如:管理员选择添加可程后,界面会先后弹出课程编号、课程性质、总学时、总学分以及继续添加按钮。如果课程添加完毕,即可退出程序。 2.2.2 删除课程功能
删除课程功能由管理员进入,在此选项中管理员可以通过键入课程编码来删除相应的课程,继续删除按回车键,退出输入“0”。 2.2.3 查询功能
查询功能管理员和学生都可一进入,输入查询编号进入,输入文件夹,可以看到三个带编号的选项,分别时按课程名称查询,按课程性质查询,按学时学分查询,操作者可根据自己的意图来进行相应的选择。 2.2.4学生选课功能
在此功能中,选课学生可以在查看了课程之后,输入自己想选的课程代码,用空格分开,选课要求学分不能少于30,科目不能超过6科,学生可根据要求自由选课。
2.2.5学生查看已选课程功能
学生可以在学生菜单中输入对应的功能编号进入,输入文件夹,即可查询到自己已选的课程。 2.2.6学生删除已选课程功能
学生输入对应的功能编号,即可进入删除功能,输入要删除课程的编号按回车,继续删除再按回车,结束删除输入“0”回车。 2.2.7不支持的功能
此程序不支持游客进入,因为在进入管理员和学生入口都有单独的密码,并且没有设置游客入口,所以不能实现游客的进入。
2.3 数据描述
int num; /*课程编号*/ char name[20]; /*课程名称*/ char kind[10]; /*课程性质*/ int stime; /*总学时*/ int ttime; /*授课学时*/
int etime; /*实验或上机学时*/ int score; /*学分*/ int term; /*开课学期*/
3概要设计
3.1 系统体系结构图
本系统首先分为两个模块:管理员模块和学生模块。管理员进入程序需要输入密码。学生模块分为:1. 浏览所有课程,2. 选择课程,3. 删除选择错误的课程,4. 修改已选择的课程,5. 查看已选择的课程。管理员模块分为:1. 录入供选择的课程,2. 查看所有课程,3. 修改已有课程,4. 删除课程。
图1. 系统体系结构图
其中:
1.
添加课程包括课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息;
2.
查询课程可以根据课程编号、名称、学分查看课程;
3. 删除课程是删除错误课程,或者不想选择的课程。
3.1.1 模块描述
模块1: 管理员入口
模块2: 学生入口
4详细设计
4.1 系统主要函数说明
各函数调用图:
图2. 函数调用
本系统主要是根据函数之间的关系以及各函数调用来进行构建的。从主函数往下分别是管理员函数Mangers(),学生函数Students()以及退出函数。
管理员函数往下分别是查看prin(),查找search(),添加insert(),删除del() 和返回return 。学生函数下面分别是查看prin(),查找search(),选择choose(),删除del()和返回return 。
4.2菜单函数
控制整个程序的运行,通过主函数模块分别调用各个模块,实现各项功能。
图3. 菜单函数
首先进入主界面,可选择以学生身份进入或以管理员身份进入。
以学生身份进入,可进行选课、修改已选课程、删除已选课程、查看选择的课程。最后存入学生文件中。
以管理员身份进入,可录入课程信息、修改课程信息、删除课程信息和查看课程信息,最后存入课程文件中。
4.3添加课程函数
添加信息函数main(),定义指针fp ,创建文件2025课设.txt 。打开文件,并且课程编号,课程名称,课程性质,授课学时,总学时,学分,开课学期等信息添加进文件2015课设.txt 中。如图4所示。
图4. 添加课程函数
4.4删除课程函数
删除函数del(),输入需要删除的编号,存在则删除成功,不存在则返回,如图5所示。
图5. 删除课程函数
学生若发现选择的课程不符合要求,可删除自己已经选择的课程,再重新进行选择课程。
查看时首先打开学生选择课程的文件,输入课程编号,若存在,则进行删除;若不存在则需重新输入课程编号。删除成功后,返回主菜单,可以查看剩余课程,如果不符合学分要求,则需要重新选择。
4.5查看课程函数
查看函数search(),通过菜单选择需要查看的类型。有按课程编号查看、按课程名称查看、按学分查看。如图6所示。
图6. 查看课程函数
首先打开课程储存文件,进入查看课程界面后,可以选择按课程编号查看,按课程名称查看和按学分查看三种查看方式。查看课程完成后则返回上一个菜单界面。
4.6选课函数
选课函数choose (),学生进入之后,输入想选的课程,空格隔开,结束回车,如果总学分不够6,选修失败,重新选修。如图7所示:
图7. 选课
在选课函数中,学生被要求选修科目不超过6门,总学分不能低于30,当超过6门时,程序则会停止运行,学分低于30分则要求重新进行选课。
5 系统测试
5.1主菜单
图8
5.2以管理员身份登录
在图8中输入1,进入如下所示界面。
图9
5.2.1添加课程信息
图10
5.2.2浏览课程信息
图11
5.2.3查询课程信息
图12
5.2.4删除课程信息
v
图13
5.3以学生身份登录
在图8中输入2,进入如下所示界面。
图14
5.3.1浏览所有课程
图15
5.3.2选择选修课程
图16
5.3.3浏览我选修的课程
图17
5.3.4删除选错的选修课程
图18
总结
在这次课程设计中,我主要负责系统程序的代码编写和调试工作,通过这次课程设计我学会了很多东西,更好的掌握了C 程序设计中的一些知识。诚然,这次课程设计让我感触很深,通过这次课程设计,我掌握了常用函数的识别和测试;熟悉了常用系统的原理;了解了程序的运行方法,以及如何提高程序的性能等等,掌握了很多编程的方法,通过查询资料,也了解了网站的构造及原理。
回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。 实验过程中,也对团队精神的进行了考察,让我们在合作起来更加默契,在成功后一起体会喜悦的心情。果然是团结就是力量,只有互相之间默契融洽的配合才能换来最终完美的结果。在这里,我也对我的课设搭档说一声辛苦了。
确实,人是需要不断的磨练的 ,在这次课程设计的磨练中,也让我体会到了以后工作的辛苦,所以我应该更加的努力,为更好的明天而奋斗。
参考文献
1 C/C++程序设计教程(第二版),王连相,中国铁道出版社,2011 2 C语言程序设计,谭浩强,清华大学出版社,1999
3 C程序设计题解与上机指导,谭浩强,清华大学出版社,1999
4 C/C++程序设计上机指导与测试(第二版),王连相,中国铁道出版社,2011
5 C语言函数手册,机械工业出版社,1999 6 C语言的实际应用,安徽科学技术出版社,2000
致 谢
在这为期两周的课设时间里,诚然,我是抱着虚心的态度求教。在此期间,让我发现了我在C 程序设计方面的很多不足,还需要很多的提升,然而在张墨逸老师悉心的指导和同学们的帮助下,帮我解决了很多的问题,让我得以顺利的完成这次课程设计,更为重要的是我从他们的身上学到了许多的知识。我相信,在今后的发展道路上,我必定会受益匪浅。
当然,我更要感谢这些帮助过我的人,没有他们的帮助,也许我的课程设计将会完成的很不好。在此,对这些帮助过我的人表以深深的感谢!
附录: 源程序
#include #include #include #include
void prin1(); void choose(); typedef struct subjects {
int num; //课程编号 char name[20]; //课程名称 char kind[10]; //课程性质 int stime; //总学时 int ttime; //授课学时 int etime; //实验或上机学时 int score; //学分 int term; //开课学期 struct subjects *next; }SUB;
SUB *head=NULL;
SUB *create_form() //创建链表 { SUB *head,*tail,*p; int num,stime,ttime; int etime,score,term; char name[20],kind[10]; int size=sizeof(SUB); head=tail=NULL;
printf("输入选修课程信息:\n");
scanf("%d%s%s%d%d%d%d%d",&num,name,kind,&stime,&ttime,&etime,&score,&term);
while(num!=0) {
p=(SUB *)malloc(size); p->num=num;
strcpy(p->name,name); strcpy(p->kind,kind); p->stime=stime; p->ttime=ttime; p->etime=etime; p->score=score; p->term=term; if(head==NULL) head=p; else tail->next=p; tail=p;
scanf("%d%s%s%d%d%d%d%d",&num,name,kind,&stime,&ttime,&etime,&score,&term); }
tail->next=NULL; return head; }
void savefile() //保存文件 { SUB *p; FILE *fp;
fp=fopen("2.txt","w"); if(fp==NULL)exit(0);
printf("课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学分 开课学期\n"); for(p=head;p;p=p->next)
fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7d\n",p->num,p->name,p->kind,p->stime,p->ttime,p->etime,p->score,p->term); fclose(fp);
printf("创建后的信息已放入'2.txt' 文件中\n"); system("pause");
void savefile1() //保存文件 { SUB *p; FILE *fp;
fp=fopen("3.txt","w"); if(fp==NULL)exit(0); for(p=head;p;p=p->next)
fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7d\n",p->num,p->name,p->kind,p->stime,p->ttime,p->etime,p->score,p->term); fclose(fp);
printf("创建后的信息已放入'3.txt' 文件中\n"); system("pause"); }
void readfile() //阅读文件 {
void *myInsert(SUB*); SUB *newSub; //新课程 int num,stime,ttime,etime; int score,term;
char c,name[20],kind[10],fname[20]; FILE *fp;
fp=fopen("2.txt","r"); while(!feof(fp)) {
newSub=(SUB*)malloc(sizeof(SUB));
fscanf(fp,"%d%s%s%d%d%d%d%d\n",&newSub->num,newSub->name,newSub->kind,&newSub->stime,&newSub->ttime,&newSub->etime,&newSub->score,&newSub->term);
myInsert(newSub); } fclose(fp); }
void prin() //浏览所有课程
SUB *ptr; head=NULL; readfile(); if(head==NULL) {
printf("\n\n\t*********NO RECORDS!************\n"); return; }
printf("课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期\n"); for(ptr=head;ptr;ptr=ptr->next) {
printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term); }
system("pause"); }
void prin1() //浏览所有选修课程 { SUB *ptr; FILE *fp;
if((fp=fopen("3.txt","r"))==NULL) {
printf("Cannot open file.\n"); choose(); }
printf("课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期\n"); while(!feof(fp)) {
ptr=(SUB*)malloc(sizeof(SUB));
fscanf(fp,"%d%s%s%d%d%d%d%d\n",&ptr->num,ptr->name,ptr->kind,&ptr->stime,&ptr-> ttime,&ptr->etime,&ptr->score,&ptr->term);
printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,ptr->kind,ptr->stime, ptr->ttime,ptr->etime,ptr->score,ptr->term); }
system("pause"); }
void *myInsert(SUB *subj) //链表插入操作 {
SUB *ptr,*ptr2; ptr=subj;
if(head==NULL) {
head=ptr; head->next=NULL; } else {
for(ptr2=head;ptr2;ptr2=ptr2->next) if(ptr2->next==NULL) {
ptr2->next=subj; subj->next=NULL; break; } }
return head; }
void *insert()//插入课程信息 {
SUB *ptr,*subj;
int size=sizeof(SUB); char ch,ch1; while(ch!='0') {
subj=(SUB *)malloc(size); ptr=subj;
printf("输入要插入的课程信息:\n");
printf("\n\t\t请输入课程编号:");scanf("%d",&subj->num); printf("\n\t\t请输入课程名称:");scanf("%s",&subj->name); printf("\n\t\t请输入课程性质:");scanf("%s",&subj->kind); printf("\n\t\t请输入总学时:");scanf("%d",&subj->stime); printf("\n\t\t请输入授课学时:");scanf("%d",&subj->ttime); printf("\n\t\t请输入实践或上机学时:");scanf("%d",&subj->etime); printf("\n\t\t请输入学分:");scanf("%d",&subj->score);
printf("\n\t\t请输入开课学期:");scanf("%d",&subj->term); myInsert(subj);
printf("\n添加完毕, 新信息存入文件中\n"); printf("\n继续插入请按回车\n"); printf("\n结束添加课程按 0: [ ]\b\b");
ch1=getchar(); //将回车键赋给CH1, 否则subj->term输完后输入的回车键会赋给
CH, 因此用CH1填补。 ch=getchar(); }
return head; }
void *del() //删除课程 {
SUB *p1,*p2; char ch,ch1; int num; while(ch!='0') {
printf("输入想要删除的课程编号:[ ]\b\b\b\b\b"); scanf("%d",&num); if(head->num==num) { p2=head;
head=head->next; free(p2); }
if(head==NULL) return NULL; p1=head; p2=head->next;
while(p2) {
if(p2->num==num) {
p1->next=p2->next; free(p2); } else p1=p2;
p2=p1->next; }
printf("\n继续删除请按回车\n"); printf("\n结束删除课程按 0: [ ]\b\b");
ch1=getchar(); //将回车键赋给CH1, 否则num 输完后再输入的回车键会赋给CH,
因此用CH1填补。 ch=getchar();
printf("\n删除完毕, 新信息存入文件中\n"); system("pause");
}
return head; system("pause"); }
void choose()//选新课程--学生选课函数 {
SUB *p,*q; int a[5];
int num,total=0,i=0,j;
printf("输入要选修的课程的编号, 编号之间以空格分开\n"); scanf("%d",&num);
printf("如果确认输入完要选修的课程的编号, 请输入0: [ ]\b\b"); while(num!=0) {
for(p=head;p;p=p->next) if(p->num==num) {
total=total+p->score; a[i]=num; i++; }
scanf("%d",&num); }
if(total
printf("选修总学分为%d,未达到60, 选修失败!\n",total); system("pause"); } else { FILE *fp;
fp=fopen("3.txt","w"); //
fprintf(fp,"课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时\n");
学分 开课学期
for(j=0;jnext) if(q->num==a[j])
fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7d\n",q->num,q->name,q->kind,q->stime,q->ttime,q->etime,q->score,q->term); fclose(fp);
printf("\t\t\n*****选修成功!****\n");
printf("\n您选修的课程总学分为%d,课程分别为:\n",total);
printf("\n课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期
\n"); for(j=0;jnext) if(q->num==a[j])
printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",q->num,q->name,q->kind,q->stime,q->ttime,q->etime,q->score,q->term); printf("\n以上信息全部保存在'3.txt' 中\n"); }
system("pause"); }
void search() //课程信息查询 {
int a,num; int t=1;
char type[10],min[10]; SUB *ptr; L1:system("cls");
printf("\n\n\t\t**********请选择查询方式*************\n"); printf("\n\t\t\t1---按课程名称查找\n"); printf("\n\t\t\t2---按课程性质查找\n"); printf("\n\t\t\t3---按学分查找\n"); printf("\n\t\t\t4---退出查找\n");
printf("\n\n\t\t**************************************\n"); printf("\n\nChiose your number(1-4):[ ]\b\b"); scanf("%d",&a); switch(a) {
case 1:printf("请输入要查找的课程的名称:");
scanf("%s",min);
printf("课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期\n");
for(ptr=head;ptr;ptr=ptr->next) if(strcmp(min,ptr->name)==0) {
printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term); t=0; }
if(t)
printf("\t\n未找到!\n");
t=1;
system("pause"); goto L1;
case 2:printf("请输入要查找的课程的性质:"); scanf("%s",type);
printf("课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期
\n"); for(ptr=head;ptr;ptr=ptr->next) if(strcmp(type,ptr->kind)==0) {
printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term);
}
if(t)
printf("\t\n未找到!\n"); t=1;
system("pause"); goto L1;
case 3:printf("输入要查找的课程的学分:");
scanf("%d",&num);
printf("课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期
\n"); for(ptr=head;ptr;ptr=ptr->next)
printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term); t=0; }
if(t)
printf("\n\t未找到!\n"); t=1;
system("pause"); goto L1;
if(ptr->score==num) {
} }
void Mangers() {
int n,w=1,flag=0,i=3; char s[8];
char password[7]="1"; do {
printf("\n\nEnter password:"); scanf("%s",s);
if(!strcmp(s,password)) //进行密码匹配验证 {
flag=1; break;
} else {
printf("\n\nError! You only have %d times! Enter again:\n",i-1); } }
while(i>0); if(!flag) {
printf("you have Enter 3 times!"); //输入密码超过了3次!! exit(0); //自动退出 } do {
system("cls");
i--; break;
puts("\n\n\t\t*********************管理员菜单***********************\n\n"); puts("\t\t\t\t1---浏览课程\n"); puts("\t\t\t\t2---查询课程\n");
puts("\t\t\t\t3---添加课程\n"); puts("\t\t\t\t4---删除课程\n"); puts("\t\t\t\t5---返回主菜单");
puts("\n\n\t\t******************************************************\n"); printf("Chiose your number(1-5):[ ]\b\b"); scanf("%d",&n); switch(n) {
case 1:prin();break; case 2:search();break;
case 3:insert();savefile(); break;
case 4:del();savefile();break; case 5: return; default:; } }
while(w==1); }
void Students() { int n,w=1; do {
system("cls");
puts("\n\n\t\t*********************学生菜单***********************\n\n");
puts("\t\t\t\t1---浏览所有课程\n"); puts("\t\t\t\t2---查询课程信息\n");
puts("\t\t\t\t3---选择选修课程\n"); puts("\t\t\t\t4---浏览我选修的课程\n"); puts("\t\t\t\t5---删除错选课程\n"); puts("\t\t\t\t6---返回主菜单");
puts("\n\n\t\t****************************************************\n");
printf("Chiose your number(1-6):[ ]\b\b"); scanf("%d",&n); switch(n) {
case 1:prin();break; case 2:search();break;
case 3:choose();break; case 4:prin1();break;
case 5:del(); savefile1(); break; case 6: return; default:; } }
while(w==1); }
int main() {
int n,w=1; do {
system("cls");
puts("\n\n\t\t*********************MENU***********************\n\n"); puts("\t\t\t\t1.以管理员身份登录(password 1)\n"); puts("\t\t\t\t2.以学生身份登录\n"); puts("\t\t\t\t3.退出");
puts("\n\n\t\t************************************************\n");
printf("Chiose your number(1-3):[ ]\b\b"); scanf("%d",&n); switch(n) {
case 1:Mangers(); break;
case 2:Students(); break; case 3:w=0; break; default:; } }
while(w==1); return 0; }
*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2015年春季学期
课程设计
题 目: 学生选课系统 专业班级:信息与计算科学 姓 名:学 号:指导教师: 张墨逸 成 绩:______________
前 言
数据库是从60年代初发展起来的计算机技术。经过四十来年的发展,数据库技术己经趋于成熟。Web 数据库在新的Internet 环境中发生了很大的变化。就数据应用而言呈现出多样化的空间,如数字图书馆、电子出版物、电子商务、远程教育系统等的出现,给web 数据库技术提出了更多、更高的要求。同时,随着国内高校校园网的建设,基于互联网的应用系统的开发正在蓬勃发展并发挥着较大的作用。例如,我国许多高校的网上招生系统,学校的各种管理信息系统,学校选课系统,还有一些医学院校开发出的网上诊所、远程诊断系统
等等,都是基于校园网的应用系统。
国外的教学科研软件与国内相比开发的早而且比较成熟。早在七十年代末,美国就建成了NSFNET(国家科学基金网) ,其课题的申报及课题的进展情况汇报都在网上进行。其网上教学教务管理系统也十分完善,世界各地的学生可以坐在家里通过互联网完成入学报名、选课、考试、毕业论文、取得学位这一学习生活的全过程。目前,国际上已具规模的远程教育学校就有数百所之多,网上教育正在各地发挥着巨大的作用,为世界各国培养出大批人才。
所有这些都表明,基于Internet 的校园网的应用已深入到校园内的各个方面。
摘 要
建立一个“学生选课系统”,系统以菜单的方式工作。编写存放的程序包含被选课的信息,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息。学校管理员首先录入可供学生选择的课程,然后学生可按要求(如总学分不得少于30)自由选课。通过子函数的编写,能对这些课程信息进行录入,浏览,查询,修改,选择功能。并将这些信息存入文件中。最后录入课程信息,进行测试,实现程序运行。
关键词:学生选课,选修学分,授课学时,课程信息,课程添加
目 录
1题目要求........................................................................................................................................ 1 2需求分析........................................................................................................................................ 1 2.1 产品需求概述........................................................................................................................ 1 2.1.1 功能简介......................................................................................................................... 1 2.1.2 运行环境......................................................................................................................... 1 2.2 功能需求 ............................................................................................................................... 2 2.2.1添加课程功能 . ................................................................................................................. 2 2.2.2 删除课程功能 . ................................................................................................................ 2 2.2.3 查询功能......................................................................................................................... 2 2.2.4学生选课功能 . ................................................................................................................. 2 2.2.5学生查看已选课程功能 . ................................................................................................. 2 2.2.6学生删除已选课程功能 . ................................................................................................. 2 2.2.7不支持的功能 . ................................................................................................................. 2 2.3 数据描述 ............................................................................................................................... 3 3概要设计.................................................................................................................................... 3 3.1 系统体系结构图 . ................................................................................................................... 3 3.1.1 模块描述......................................................................................................................... 4 4详细设计.................................................................................................................................... 5 4.1 系统主要函数说明 . ............................................................................................................... 5 4.2菜单函数 ................................................................................................................................ 5 4.3添加课程函数......................................................................................................................... 6 4.4删除课程函数......................................................................................................................... 7 4.5查看课程函数......................................................................................................................... 8 4.6选课函数 ................................................................................................................................ 9 5 系统测试..................................................................................................................................... 10 5.1主菜单 .................................................................................................................................. 11 5.2以管理员身份登录 . .................................................................................................................. 5.2.1添加课程信息 . ................................................................................................................... 5.2.2浏览课程信息 . ................................................................................................................... 5.2.3查询课程信息 . ................................................................................................................... 5.2.4删除课程信息 . ............................................................................................................... 14 5.3以学生身份登录 . .............................................................................................................. 15 5.3.1浏览所有课程 . ............................................................................................................... 16 5.3.2选择选修课程 . ............................................................................................................... 16 参考文献 ........................................................................................................................................ 16 致 谢 ................................................................................................................................................ 附录: ............................................................................................................................................ 22 源程序 ............................................................................................................................................ 22
1题目要求
(1)以学校教务管理系统选课系统为背景,通过调研、分析现有的选课模式和选课软件,建立系统模型;
(2)完成软件结构设计、算法设计以及备选课程的录入工作; (3)完成系统软件开发和测试工作; (4)撰写设计说明书; (5)做好答辩工作。
2需求分析
2.1 产品需求概述
2.1.1 功能简介
随着教育科技的进步,原始的选课方式已经不能满足当今社会大学生选课的需求,该系统主要针对选课的大学生,可以使大学生按要求自由选课。每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息。“学生选课系统”可以实现以下功能:
(1)系统以菜单方式工作;
(2)课程信息录入功能(课程信息用文件保存) ; (3)课程信息浏览功能;
(4)查询功能:按学分查询、按课程性质查询、学生已选课信息查询; (5)信息的删除与修改等功能。 2.1.2 运行环境
最低配置:Windows xp系统,推荐配置:Windows 7系统; 运行环境:VC++6.0
2.2 功能需求
功能需求描述系统特性,即产品所提供的主要服务。 2.2.1添加课程功能
课程信息录入功能可以由管理员进入,管理员打开录入界面,可以根据提示进行课程的录入工作,例如:管理员选择添加可程后,界面会先后弹出课程编号、课程性质、总学时、总学分以及继续添加按钮。如果课程添加完毕,即可退出程序。 2.2.2 删除课程功能
删除课程功能由管理员进入,在此选项中管理员可以通过键入课程编码来删除相应的课程,继续删除按回车键,退出输入“0”。 2.2.3 查询功能
查询功能管理员和学生都可一进入,输入查询编号进入,输入文件夹,可以看到三个带编号的选项,分别时按课程名称查询,按课程性质查询,按学时学分查询,操作者可根据自己的意图来进行相应的选择。 2.2.4学生选课功能
在此功能中,选课学生可以在查看了课程之后,输入自己想选的课程代码,用空格分开,选课要求学分不能少于30,科目不能超过6科,学生可根据要求自由选课。
2.2.5学生查看已选课程功能
学生可以在学生菜单中输入对应的功能编号进入,输入文件夹,即可查询到自己已选的课程。 2.2.6学生删除已选课程功能
学生输入对应的功能编号,即可进入删除功能,输入要删除课程的编号按回车,继续删除再按回车,结束删除输入“0”回车。 2.2.7不支持的功能
此程序不支持游客进入,因为在进入管理员和学生入口都有单独的密码,并且没有设置游客入口,所以不能实现游客的进入。
2.3 数据描述
int num; /*课程编号*/ char name[20]; /*课程名称*/ char kind[10]; /*课程性质*/ int stime; /*总学时*/ int ttime; /*授课学时*/
int etime; /*实验或上机学时*/ int score; /*学分*/ int term; /*开课学期*/
3概要设计
3.1 系统体系结构图
本系统首先分为两个模块:管理员模块和学生模块。管理员进入程序需要输入密码。学生模块分为:1. 浏览所有课程,2. 选择课程,3. 删除选择错误的课程,4. 修改已选择的课程,5. 查看已选择的课程。管理员模块分为:1. 录入供选择的课程,2. 查看所有课程,3. 修改已有课程,4. 删除课程。
图1. 系统体系结构图
其中:
1.
添加课程包括课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息;
2.
查询课程可以根据课程编号、名称、学分查看课程;
3. 删除课程是删除错误课程,或者不想选择的课程。
3.1.1 模块描述
模块1: 管理员入口
模块2: 学生入口
4详细设计
4.1 系统主要函数说明
各函数调用图:
图2. 函数调用
本系统主要是根据函数之间的关系以及各函数调用来进行构建的。从主函数往下分别是管理员函数Mangers(),学生函数Students()以及退出函数。
管理员函数往下分别是查看prin(),查找search(),添加insert(),删除del() 和返回return 。学生函数下面分别是查看prin(),查找search(),选择choose(),删除del()和返回return 。
4.2菜单函数
控制整个程序的运行,通过主函数模块分别调用各个模块,实现各项功能。
图3. 菜单函数
首先进入主界面,可选择以学生身份进入或以管理员身份进入。
以学生身份进入,可进行选课、修改已选课程、删除已选课程、查看选择的课程。最后存入学生文件中。
以管理员身份进入,可录入课程信息、修改课程信息、删除课程信息和查看课程信息,最后存入课程文件中。
4.3添加课程函数
添加信息函数main(),定义指针fp ,创建文件2025课设.txt 。打开文件,并且课程编号,课程名称,课程性质,授课学时,总学时,学分,开课学期等信息添加进文件2015课设.txt 中。如图4所示。
图4. 添加课程函数
4.4删除课程函数
删除函数del(),输入需要删除的编号,存在则删除成功,不存在则返回,如图5所示。
图5. 删除课程函数
学生若发现选择的课程不符合要求,可删除自己已经选择的课程,再重新进行选择课程。
查看时首先打开学生选择课程的文件,输入课程编号,若存在,则进行删除;若不存在则需重新输入课程编号。删除成功后,返回主菜单,可以查看剩余课程,如果不符合学分要求,则需要重新选择。
4.5查看课程函数
查看函数search(),通过菜单选择需要查看的类型。有按课程编号查看、按课程名称查看、按学分查看。如图6所示。
图6. 查看课程函数
首先打开课程储存文件,进入查看课程界面后,可以选择按课程编号查看,按课程名称查看和按学分查看三种查看方式。查看课程完成后则返回上一个菜单界面。
4.6选课函数
选课函数choose (),学生进入之后,输入想选的课程,空格隔开,结束回车,如果总学分不够6,选修失败,重新选修。如图7所示:
图7. 选课
在选课函数中,学生被要求选修科目不超过6门,总学分不能低于30,当超过6门时,程序则会停止运行,学分低于30分则要求重新进行选课。
5 系统测试
5.1主菜单
图8
5.2以管理员身份登录
在图8中输入1,进入如下所示界面。
图9
5.2.1添加课程信息
图10
5.2.2浏览课程信息
图11
5.2.3查询课程信息
图12
5.2.4删除课程信息
v
图13
5.3以学生身份登录
在图8中输入2,进入如下所示界面。
图14
5.3.1浏览所有课程
图15
5.3.2选择选修课程
图16
5.3.3浏览我选修的课程
图17
5.3.4删除选错的选修课程
图18
总结
在这次课程设计中,我主要负责系统程序的代码编写和调试工作,通过这次课程设计我学会了很多东西,更好的掌握了C 程序设计中的一些知识。诚然,这次课程设计让我感触很深,通过这次课程设计,我掌握了常用函数的识别和测试;熟悉了常用系统的原理;了解了程序的运行方法,以及如何提高程序的性能等等,掌握了很多编程的方法,通过查询资料,也了解了网站的构造及原理。
回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。 实验过程中,也对团队精神的进行了考察,让我们在合作起来更加默契,在成功后一起体会喜悦的心情。果然是团结就是力量,只有互相之间默契融洽的配合才能换来最终完美的结果。在这里,我也对我的课设搭档说一声辛苦了。
确实,人是需要不断的磨练的 ,在这次课程设计的磨练中,也让我体会到了以后工作的辛苦,所以我应该更加的努力,为更好的明天而奋斗。
参考文献
1 C/C++程序设计教程(第二版),王连相,中国铁道出版社,2011 2 C语言程序设计,谭浩强,清华大学出版社,1999
3 C程序设计题解与上机指导,谭浩强,清华大学出版社,1999
4 C/C++程序设计上机指导与测试(第二版),王连相,中国铁道出版社,2011
5 C语言函数手册,机械工业出版社,1999 6 C语言的实际应用,安徽科学技术出版社,2000
致 谢
在这为期两周的课设时间里,诚然,我是抱着虚心的态度求教。在此期间,让我发现了我在C 程序设计方面的很多不足,还需要很多的提升,然而在张墨逸老师悉心的指导和同学们的帮助下,帮我解决了很多的问题,让我得以顺利的完成这次课程设计,更为重要的是我从他们的身上学到了许多的知识。我相信,在今后的发展道路上,我必定会受益匪浅。
当然,我更要感谢这些帮助过我的人,没有他们的帮助,也许我的课程设计将会完成的很不好。在此,对这些帮助过我的人表以深深的感谢!
附录: 源程序
#include #include #include #include
void prin1(); void choose(); typedef struct subjects {
int num; //课程编号 char name[20]; //课程名称 char kind[10]; //课程性质 int stime; //总学时 int ttime; //授课学时 int etime; //实验或上机学时 int score; //学分 int term; //开课学期 struct subjects *next; }SUB;
SUB *head=NULL;
SUB *create_form() //创建链表 { SUB *head,*tail,*p; int num,stime,ttime; int etime,score,term; char name[20],kind[10]; int size=sizeof(SUB); head=tail=NULL;
printf("输入选修课程信息:\n");
scanf("%d%s%s%d%d%d%d%d",&num,name,kind,&stime,&ttime,&etime,&score,&term);
while(num!=0) {
p=(SUB *)malloc(size); p->num=num;
strcpy(p->name,name); strcpy(p->kind,kind); p->stime=stime; p->ttime=ttime; p->etime=etime; p->score=score; p->term=term; if(head==NULL) head=p; else tail->next=p; tail=p;
scanf("%d%s%s%d%d%d%d%d",&num,name,kind,&stime,&ttime,&etime,&score,&term); }
tail->next=NULL; return head; }
void savefile() //保存文件 { SUB *p; FILE *fp;
fp=fopen("2.txt","w"); if(fp==NULL)exit(0);
printf("课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学分 开课学期\n"); for(p=head;p;p=p->next)
fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7d\n",p->num,p->name,p->kind,p->stime,p->ttime,p->etime,p->score,p->term); fclose(fp);
printf("创建后的信息已放入'2.txt' 文件中\n"); system("pause");
void savefile1() //保存文件 { SUB *p; FILE *fp;
fp=fopen("3.txt","w"); if(fp==NULL)exit(0); for(p=head;p;p=p->next)
fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7d\n",p->num,p->name,p->kind,p->stime,p->ttime,p->etime,p->score,p->term); fclose(fp);
printf("创建后的信息已放入'3.txt' 文件中\n"); system("pause"); }
void readfile() //阅读文件 {
void *myInsert(SUB*); SUB *newSub; //新课程 int num,stime,ttime,etime; int score,term;
char c,name[20],kind[10],fname[20]; FILE *fp;
fp=fopen("2.txt","r"); while(!feof(fp)) {
newSub=(SUB*)malloc(sizeof(SUB));
fscanf(fp,"%d%s%s%d%d%d%d%d\n",&newSub->num,newSub->name,newSub->kind,&newSub->stime,&newSub->ttime,&newSub->etime,&newSub->score,&newSub->term);
myInsert(newSub); } fclose(fp); }
void prin() //浏览所有课程
SUB *ptr; head=NULL; readfile(); if(head==NULL) {
printf("\n\n\t*********NO RECORDS!************\n"); return; }
printf("课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期\n"); for(ptr=head;ptr;ptr=ptr->next) {
printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term); }
system("pause"); }
void prin1() //浏览所有选修课程 { SUB *ptr; FILE *fp;
if((fp=fopen("3.txt","r"))==NULL) {
printf("Cannot open file.\n"); choose(); }
printf("课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期\n"); while(!feof(fp)) {
ptr=(SUB*)malloc(sizeof(SUB));
fscanf(fp,"%d%s%s%d%d%d%d%d\n",&ptr->num,ptr->name,ptr->kind,&ptr->stime,&ptr-> ttime,&ptr->etime,&ptr->score,&ptr->term);
printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,ptr->kind,ptr->stime, ptr->ttime,ptr->etime,ptr->score,ptr->term); }
system("pause"); }
void *myInsert(SUB *subj) //链表插入操作 {
SUB *ptr,*ptr2; ptr=subj;
if(head==NULL) {
head=ptr; head->next=NULL; } else {
for(ptr2=head;ptr2;ptr2=ptr2->next) if(ptr2->next==NULL) {
ptr2->next=subj; subj->next=NULL; break; } }
return head; }
void *insert()//插入课程信息 {
SUB *ptr,*subj;
int size=sizeof(SUB); char ch,ch1; while(ch!='0') {
subj=(SUB *)malloc(size); ptr=subj;
printf("输入要插入的课程信息:\n");
printf("\n\t\t请输入课程编号:");scanf("%d",&subj->num); printf("\n\t\t请输入课程名称:");scanf("%s",&subj->name); printf("\n\t\t请输入课程性质:");scanf("%s",&subj->kind); printf("\n\t\t请输入总学时:");scanf("%d",&subj->stime); printf("\n\t\t请输入授课学时:");scanf("%d",&subj->ttime); printf("\n\t\t请输入实践或上机学时:");scanf("%d",&subj->etime); printf("\n\t\t请输入学分:");scanf("%d",&subj->score);
printf("\n\t\t请输入开课学期:");scanf("%d",&subj->term); myInsert(subj);
printf("\n添加完毕, 新信息存入文件中\n"); printf("\n继续插入请按回车\n"); printf("\n结束添加课程按 0: [ ]\b\b");
ch1=getchar(); //将回车键赋给CH1, 否则subj->term输完后输入的回车键会赋给
CH, 因此用CH1填补。 ch=getchar(); }
return head; }
void *del() //删除课程 {
SUB *p1,*p2; char ch,ch1; int num; while(ch!='0') {
printf("输入想要删除的课程编号:[ ]\b\b\b\b\b"); scanf("%d",&num); if(head->num==num) { p2=head;
head=head->next; free(p2); }
if(head==NULL) return NULL; p1=head; p2=head->next;
while(p2) {
if(p2->num==num) {
p1->next=p2->next; free(p2); } else p1=p2;
p2=p1->next; }
printf("\n继续删除请按回车\n"); printf("\n结束删除课程按 0: [ ]\b\b");
ch1=getchar(); //将回车键赋给CH1, 否则num 输完后再输入的回车键会赋给CH,
因此用CH1填补。 ch=getchar();
printf("\n删除完毕, 新信息存入文件中\n"); system("pause");
}
return head; system("pause"); }
void choose()//选新课程--学生选课函数 {
SUB *p,*q; int a[5];
int num,total=0,i=0,j;
printf("输入要选修的课程的编号, 编号之间以空格分开\n"); scanf("%d",&num);
printf("如果确认输入完要选修的课程的编号, 请输入0: [ ]\b\b"); while(num!=0) {
for(p=head;p;p=p->next) if(p->num==num) {
total=total+p->score; a[i]=num; i++; }
scanf("%d",&num); }
if(total
printf("选修总学分为%d,未达到60, 选修失败!\n",total); system("pause"); } else { FILE *fp;
fp=fopen("3.txt","w"); //
fprintf(fp,"课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时\n");
学分 开课学期
for(j=0;jnext) if(q->num==a[j])
fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7d\n",q->num,q->name,q->kind,q->stime,q->ttime,q->etime,q->score,q->term); fclose(fp);
printf("\t\t\n*****选修成功!****\n");
printf("\n您选修的课程总学分为%d,课程分别为:\n",total);
printf("\n课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期
\n"); for(j=0;jnext) if(q->num==a[j])
printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",q->num,q->name,q->kind,q->stime,q->ttime,q->etime,q->score,q->term); printf("\n以上信息全部保存在'3.txt' 中\n"); }
system("pause"); }
void search() //课程信息查询 {
int a,num; int t=1;
char type[10],min[10]; SUB *ptr; L1:system("cls");
printf("\n\n\t\t**********请选择查询方式*************\n"); printf("\n\t\t\t1---按课程名称查找\n"); printf("\n\t\t\t2---按课程性质查找\n"); printf("\n\t\t\t3---按学分查找\n"); printf("\n\t\t\t4---退出查找\n");
printf("\n\n\t\t**************************************\n"); printf("\n\nChiose your number(1-4):[ ]\b\b"); scanf("%d",&a); switch(a) {
case 1:printf("请输入要查找的课程的名称:");
scanf("%s",min);
printf("课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期\n");
for(ptr=head;ptr;ptr=ptr->next) if(strcmp(min,ptr->name)==0) {
printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term); t=0; }
if(t)
printf("\t\n未找到!\n");
t=1;
system("pause"); goto L1;
case 2:printf("请输入要查找的课程的性质:"); scanf("%s",type);
printf("课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期
\n"); for(ptr=head;ptr;ptr=ptr->next) if(strcmp(type,ptr->kind)==0) {
printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term);
}
if(t)
printf("\t\n未找到!\n"); t=1;
system("pause"); goto L1;
case 3:printf("输入要查找的课程的学分:");
scanf("%d",&num);
printf("课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期
\n"); for(ptr=head;ptr;ptr=ptr->next)
printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term); t=0; }
if(t)
printf("\n\t未找到!\n"); t=1;
system("pause"); goto L1;
if(ptr->score==num) {
} }
void Mangers() {
int n,w=1,flag=0,i=3; char s[8];
char password[7]="1"; do {
printf("\n\nEnter password:"); scanf("%s",s);
if(!strcmp(s,password)) //进行密码匹配验证 {
flag=1; break;
} else {
printf("\n\nError! You only have %d times! Enter again:\n",i-1); } }
while(i>0); if(!flag) {
printf("you have Enter 3 times!"); //输入密码超过了3次!! exit(0); //自动退出 } do {
system("cls");
i--; break;
puts("\n\n\t\t*********************管理员菜单***********************\n\n"); puts("\t\t\t\t1---浏览课程\n"); puts("\t\t\t\t2---查询课程\n");
puts("\t\t\t\t3---添加课程\n"); puts("\t\t\t\t4---删除课程\n"); puts("\t\t\t\t5---返回主菜单");
puts("\n\n\t\t******************************************************\n"); printf("Chiose your number(1-5):[ ]\b\b"); scanf("%d",&n); switch(n) {
case 1:prin();break; case 2:search();break;
case 3:insert();savefile(); break;
case 4:del();savefile();break; case 5: return; default:; } }
while(w==1); }
void Students() { int n,w=1; do {
system("cls");
puts("\n\n\t\t*********************学生菜单***********************\n\n");
puts("\t\t\t\t1---浏览所有课程\n"); puts("\t\t\t\t2---查询课程信息\n");
puts("\t\t\t\t3---选择选修课程\n"); puts("\t\t\t\t4---浏览我选修的课程\n"); puts("\t\t\t\t5---删除错选课程\n"); puts("\t\t\t\t6---返回主菜单");
puts("\n\n\t\t****************************************************\n");
printf("Chiose your number(1-6):[ ]\b\b"); scanf("%d",&n); switch(n) {
case 1:prin();break; case 2:search();break;
case 3:choose();break; case 4:prin1();break;
case 5:del(); savefile1(); break; case 6: return; default:; } }
while(w==1); }
int main() {
int n,w=1; do {
system("cls");
puts("\n\n\t\t*********************MENU***********************\n\n"); puts("\t\t\t\t1.以管理员身份登录(password 1)\n"); puts("\t\t\t\t2.以学生身份登录\n"); puts("\t\t\t\t3.退出");
puts("\n\n\t\t************************************************\n");
printf("Chiose your number(1-3):[ ]\b\b"); scanf("%d",&n); switch(n) {
case 1:Mangers(); break;
case 2:Students(); break; case 3:w=0; break; default:; } }
while(w==1); return 0; }