选修课管理系统.doc_第1页
选修课管理系统.doc_第2页
选修课管理系统.doc_第3页
选修课管理系统.doc_第4页
选修课管理系统.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构课程设计报告二题 目:学生选修课管理系统专业年级:信计09级 姓 名:慕小宇 学号: 0917010207指导老师: 杨先凤、游书涛 完成日期:2012年1月6日 成绩: 一、问题描述1、题目内容:这是一个学生选修系统,通过该系统学生可以实现网上选课,查询自己某门选修课的分数,平均成绩等。通过该系统我们学生可以清楚直观方便地了解所想选的课程的情况,比如是否选修该课程的人数已满等。学校管理员通过该系统可以调出学生的选课名单和成绩,也就是说管理员可以调出每门选修课的学生数,学生名单等。管理员还可以设定每门选修课的学分。当然管理员也可以通过简单地修改,来达到增加或是减少某门选修课的限选人数的目的。2、基本要求:本系统主要实现三大功能:(一)、学生选课:1)学生登录;2)进行初选,复选,补退选;3)查询选课情况,上课时间,地点,与上课老师;4)修改登录密码,添加或删除选课的相关信息;5)查询成绩;(二)、教师查询:1)教师登录;2)查询课程信息(上课时间、地点以及课程是否被取消,查询选择自己课程的学生清单;3)修改登录密码;4)登记学生成绩。(三)、管理员对选修课管理:1)设置学生可选修的课程范围以及选修的约束条件;2)添加课程,修改密码,浏览选课情况、关闭选课人数不足15人的课程;3)对选修课进行排课;4)等级选修课的成绩。二、需求分析1、(程序所能达到的基本功能)选课:学生能够在网上实现正常学期的本专业本年级推荐选课、本院系开设课程、体育课、政治课、公共英语课、文科计算机课、通选课和公选课的选课;成绩查询:学生能够在网上快速、便捷地查询到自己所有学期的课程成绩(包括本院系所学课程成绩、辅修/双学位成绩);选课情况查询:学生从网上就可以了解自己的选课情况(包括正常学期和暑期学校的选课),避免了许多不必要的麻烦;退课情况查询:学生可以清楚地查看到自己退课的时间和所用的IP地址;体育课评估;修改密码:此功能更加完善了系统的功能;用户注销:不仅方便用户退出系统重新进行别的操作,而且更为重要的是它能够及时保证用户在使用此系统时的安全性;系统设置:系统管理员配置相关信息,包括教师登记课程时间范围,学生选课时间范围,每班最多人数,选修课上课日期,选课学生范围等;教师登记课程:开课教师在规定的时间内登记自己要开设的选修课程;学生选课:学生在规定的选课时间内自由选课报名,在规定时间内,可以退选、补选、改选课程选课调整:学生选课期截止后,系统管理员可以根据学生本人、班主任或者任课教师的要求针对个别学生的选课进行调整,包括强制选课、退选、换选三种;生成报表:自动生成EXCEL报表,包括学生本人的选课列表、给班主任的选课名单和给上课教师的报名名单。2、(输入的形式和输入值的范围)3、(输出的形式)4、(测试数据要求)三、概要设计1、(所需的ADT,它们的作用)2、(主程序流程及模块调用关系)3、(核心的粗线条伪码算法)四、详细设计1、(实现概要设计的数据类型,重点语句加注释)2、(每个操作的伪码算法,重点语句加注释)3、(主程序和其他模块的伪码算法,重点语句加注释)(一)、结构体声明,创建链表及主函数模块:#include#include #include typedef struct subjects /定义课程信息结构体 int num; /课程编号 char name20; /课程名称 char kind10; /课程性质 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 name20,kind10; 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(sizeof(SUB); 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;int main()int n,w=1;do system(cls);puts(nntt*MENU*nn); puts(tttt1.以管理员身份登录n); puts(tttt2.以学生身份登录n);puts(tttt3.退出); puts(nntt*n); printf(Chiose your number(1-3): bb); scanf(%d,&n);switch(n)case 1:Mangers() ;break;case 2:Students();break;case 3:w=0;break;default:; while(w=1); return 0;(二)、管理员模块:void Mangers() int n,w=1,flag=0,i=3; char s8; char password7=1; do printf(nnEnter password:); scanf(%s,s); if(!strcmp(s,password) /进行密码匹配验证 flag=1; break; else printf(nnError! You only have %d times! Enter again:n,i-1); i-; while(i0); if(!flag) printf(you have Enter 3 times!); /输入密码超过了3次! exit(0); /自动退出 do system(cls); puts(nntt*管理员菜单*nn); puts(tttt1-浏览课程n);puts(tttt2-查询课程n); puts(tttt3-添加课程n); puts(tttt4-删除课程n);puts(tttt5-返回主菜单);puts(nntt*n); printf(Chiose your number(1-5): bb); 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(nntt*学生菜单*nn); puts(tttt1-浏览所有课程n);puts(tttt2-查询课程信息n); puts(tttt3-选择选修课程n); puts(tttt4-浏览我选修的课程n); puts(tttt5-删除错选课程n);puts(tttt6-返回主菜单); puts(nntt*n); printf(Chiose your number(1-6): bb); 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);(四)、浏览模块:void prin() /浏览所有课程SUB *ptr;head=NULL;readfile();if(head=NULL)printf(nnt*NO RECORDS!*n);return;printf(课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n);for(ptr=head;ptr;ptr=ptr-next)printf(%5d%12s%9s%9d%9d%11d%11d%7dn,ptr-num,ptr-name,ptr-kind,ptr-stime,ptr-ttime,ptr-etime,ptr-score,ptr-term);system(pause);return head;(五)、查询模块:void search() /课程信息查询 int a,num; int t=1; char type10,min10; SUB *ptr; L1:system(cls);printf(nntt*请选择查询方式*n); printf(nttt1-按课程名称查找n); printf(nttt2-按课程性质查找n); printf(nttt3-按学分查找n); printf(nttt4-退出查找n); printf(nntt*n); printf(nnChiose your number(1-4): bb); scanf(%d,&a); switch(a) case 1:printf(请输入要查找的课程的名称:);scanf(%s,min); for(ptr=head;ptr;ptr=ptr-next)if(strcmp(min,ptr-name)=0) printf(%5d%12s%9s%9d%9d%11d%11d%7dn,ptr-num,ptr-name,ptr-kind,ptr-stime,ptr-ttime,ptr-etime,ptr-score,ptr-term); t=0;if(t) printf(tn未找到!n);t=1;system(pause);goto L1; case 2:printf(请输入要查找的课程的性质:); scanf(%s,type); for(ptr=head;ptr;ptr=ptr-next) if(strcmp(type,ptr-kind)=0) printf(%5d%12s%9s%9d%9d%11d%11d%7dn,ptr-num,ptr-name,ptr-kind,ptr-stime,ptr-ttime,ptr-etime,ptr-score,ptr-term); t=0;if(t) printf(tn未找到!n);t=1;system(pause);goto L1; case 3:printf(输入要查找的课程的学分:); scanf(%d,&num); for(ptr=head;ptr;ptr=ptr-next) if(ptr-score=num) printf(%5d%12s%9s%9d%9d%11d%11d%7dn,ptr-num,ptr-name,ptr-kind,ptr-stime,ptr-ttime,ptr-etime,ptr-score,ptr-term); t=0;if(t) printf(nt未找到!n);t=1;system(pause);goto L1;case 4:break;(六)、插入链表模块: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; char ch,ch1; while(ch!=0) subj=(SUB *)malloc(sizeof(SUB); ptr=subj; printf(输入要插入的课程信息:n); printf(ntt请输入课程编号:);scanf(%d,&subj-num); printf(ntt请输入课程名称:);scanf(%s,&subj-name); printf(ntt请输入课程性质:);scanf(%s,&subj-kind); printf(ntt请输入总学时:);scanf(%d,&subj-stime); printf(ntt请输入授课学时:);scanf(%d,&subj-ttime); printf(ntt请输入实践或上机学时:);scanf(%d,&subj-etime); printf(ntt请输入学分:);scanf(%d,&subj-score); printf(ntt请输入开课学期:);scanf(%d,&subj-term); myInsert(subj);printf(n添加完毕,新信息存入文件中n);printf(n继续插入请按回车n);printf(n结束添加课程按 0: bb);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(输入想要删除的课程编号: bbbbb);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: bb);ch1=getchar(); /将回车键赋给CH1,否则num输完后再输入的回车键会赋给CH,因此用CH1填补。ch=getchar();savefile1();printf(n删除完毕,新信息存入文件中n);system(pause); return head;system(pause);(九)、选修课程模块:void choose()/选新课程-学生选课函数SUB *p,*q;int a10;int num,total=0,i=0,j;printf(输入要选修的课程的编号,编号之间以空格分开n);scanf(%d,&num);printf(如果确认输入完要选修的课程的编号,请输入0: bb);while(num!=0)for(p=head;p;p=p-next)if(p-num=num)total=total+(p-score);ai=num;i+;scanf(%d,&num);if(totalnext)if(q-num=aj)fprintf(fp,%5d%12s%9s%9d%9d%11d%11d%7dn,q-num,q-name,q-kind,q-stime,q-ttime,q-etime,q-score,q-term);fclose(fp);printf(ttn*选修成功!*n);printf(n您选修的课程总学分为%d,课程分别为:n,total);printf(n课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n);for(j=0;jnext)if(q-num=aj)printf(%5d%12s%9s%9d%9d%11d%11d%7dn,q-num,q-name,q-kind,q-stime,q-ttime,q-etime,q-score,q-term);printf(n以上信息全部保存在3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论