毕业设计(论文)基于C++的学生选课系统

上传人:1777****777 文档编号:36164159 上传时间:2021-10-29 格式:DOC 页数:44 大小:371.03KB
收藏 版权申诉 举报 下载
毕业设计(论文)基于C++的学生选课系统_第1页
第1页 / 共44页
毕业设计(论文)基于C++的学生选课系统_第2页
第2页 / 共44页
毕业设计(论文)基于C++的学生选课系统_第3页
第3页 / 共44页
资源描述:

《毕业设计(论文)基于C++的学生选课系统》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于C++的学生选课系统(44页珍藏版)》请在装配图网上搜索。

1、摘 要学生选课系统是一个针对高校学生选课而开发的学生选课信息管理系统,是为学生选课提供安全、快捷、方便的服务而建立的应用软件。本系统是一个典型的学生选课系统,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。另外,本文还着重论述了信息管理系统的系统功能与实现,包括数据流程及存储、学生课程设置、选课修改及删除等。本系统可以使老师、学生更方便的选课。实现全校学生选课查询。由于学生上课情况复杂,可以实现信息修改,及时调整学生的基本情况。切实的提高学校的管理的工作效率。关键字:学

2、生选课系统;c+;管理员;学生;查询AbstractStudents in college course system is a course and development of student course students information management system, course is for studentsProvide safe, efficient and convenient services and applications. This system is a typical information management system, its develo

3、pment mainly bag Cover the setting and maintenance of database and the programming of the frontend application. The former required consistency and Integrality, and the security of data. For the latter request application function complete, easy to use, etc. In addition, this paper also Focuses on t

4、he information management system of the system function and the realization, including the data flow and storage, student courses, students information,User registration, modification and deletion of online courses. This system can make teachers and students more convenient courses. Realizing course

5、 in the chool,Line of inquiry. Due to the complex classes, can achieve information modification, adjust the basic situation of the students. To improve school The management of the work efficiency.Keywords:The system of Student course; c+; Student Management Information System;student;目录目录第一章第一章 课题概

6、述课题概述 .1 11.1 应用背景的分析 .11.1.1 学校管理系统的开发现状及方法.11.1.2 学生选课系统的应用价值.21.2 课题要求与提示.21.2.1 课题要求.31.2.2 课题提示 .3第二章第二章 设计简介及系统大纲设计简介及系统大纲 .42.1 设计简介.42.1.1 学生端的设计 .42.1.2 管理端的设计 .42.2 系统流程 .5第三章第三章 详细设计详细设计 .6 63.1 主函数,头文件及结构体声明 .63.2 管理员功能模块 .73.3 学生功能菜单 .103.4 创建链表模块 .113.5 浏览模块 .123.6 查询模块 .133.7 插入链表模块 .

7、163.8 添加模块 .163.9 删除模块 .173.10 选修课程模块 .183.11 读取文件模块 .213.12 保存文件模块 .22第四章第四章 设计结果及分析设计结果及分析 .244.1 学生选课结果及分析.244.1.1 学生选课实现功能.244.1.2 选课结果分析.2542 管理员结果及分析.254.2.1 管理员结果.2542.2 分析.25总总 结结 .26致致 谢谢 .27参考文献参考文献 .28附录附录 完整程序代码完整程序代码 .29西安文理学院计算机科学系 课程设计报告1第一章 课题概述1.1 应用背景的分析1.1.1 学校管理系统的开发现状及方法在高等学校的教务

8、管理工作中,课程表的编排是一项十分复杂、棘手的工作。在排课过程中除了满足大量的制约条件以外,还必须解决许多冲突与矛盾,例如:两位教师不能同一时间在同一班级上课、一位教师不能在同一时间上两门课等等。利用计算机辅助进行课表编排工作,既提高了排课工作的科学性,又可大大减轻管理人员的工作强度,提高工作效率,从而使学校教务管理现代化迈上了一个新台阶。我国不少高校都实行了学分制,它的核心是允许学生自由选课,即把学习的自主权交给学生。在这里,学生选课时的制约因素比较复杂,工作量也很大,而且往往需要在较短的时间内完成。运用计算机辅助选课,即能实时地对大量选课数据进行检验和统计,十分方便地输出选课结果,同时也避

9、免了人工处理时容易产生的错误。从系统开发的复杂程度来看,计算机辅助排课与选课是高校教务系统中的两个关键子系统,目前不少教务系统尚未很好地解决排课与选课问题。本文主要对高校教务管理系统中计算机课表编排与选课子系统的基本功能、设计思想、需求分析以及实现技术进行探讨。我想大家肯定都经历过学生时代,也许很多人还对那个时候的选课记忆犹新,每个学期都要排着长长的队伍去选。现在,我们已经进入到Internet 时代了,选课系统自然也要随着更新。大学中,公选课较多,学生可根据自己的专业及兴趣选择公选课程进行学习,本系统将从教学部门的要求出发,实现公选课的选择、查询与统计。数据库是从60 年代初发展起来的计算机

10、技术。经过四十来年的发展,数据库技术己经趋于成熟。Web 数据库在新的Internet 环境中发生了很大的变化。就数据应用而言呈现出多样化的空间,如数字图书馆、电子出版物、电子商务、远程教育系统等的出现,给web 数据库技术提出了更多、更高的要求。同时,随着国内高校校园网的建设,基于互联网的应用系统的开发正在蓬勃发展并发挥着较大的作用。例如,我国许多高校的网上招生系统,学校的各种管理信息系统,学校选课系统,还有一些医学院校开发出的网上诊所、远程诊断系统等等,都是基于校园网的应用系统。国外的教学科研软件与国内相比开发的早而且比较成熟。早在七十年代末,西安文理学院计算机科学系 课程设计报告2美国就

11、建成了NSFNET(国家科学基金网),其课题的申报及课题的进展情况汇报都在网上进行。其网上教学教务管理系统也十分完善,世界各地的学生可以坐在家里通过互联网完成入学报名、选课、考试、毕业论文、取得学位这一学习生活的全过程。目前,国际上已具规模的远程教育学校就有数百所之多,网上教育正在各地发挥着巨大的作用,为世界各国培养出大批人才。所有这些都表明,基于Internet 的校园网的应用已深入到校园内的各个方面。1.1.2学生选课系统的应用价值这份可行性研究报告是对学生选课系统作的可行性研究分析及指出存在的必性。本报告的编写目的在于研究选课系统软件的开发途径和应用方法。当今时代是飞速发展的信息时代。在

12、各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。本系统就是为了管理好选课信息而设计的。学校作为一种信息资源的集散地,学生和课程繁多,包含很多的信息数据的管理,现今,有很多的学校都是初步开始使用,甚至尚未使用计算机进行信息管理。根据调查得知,他们以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于选课情况的统计和查询等往往

13、采用对课程的人工检查进行,对学生的选课权限、以及选课代号等用人工计算、手抄进行。数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统,规范的信息管理手段。尽管学校都有计算机,但是尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,这就是管理信息系统的开发的基本环境。数据处理手工操作,工作量大,出错率高,出错后不易更改。学校采取手工方式对学生选课情况进行人工管理,由于信息比较多,选课信息的管理工作混乱而又复杂;一般选课情况是记录在文件上,课程的数目和代号也记录在文件中,学校的工作人员也只是当时对它比较清楚,时间长了,如再要进行查询,就得在众多的资料中翻阅、查找

14、了,造成查询费时、费力。如要对很长时间以前的选课进行更改就更加困难了。基于这些问题,我认为有必要建立一个学生选课系统,使选课管理工作规范化,系统化,程序化,避免选课管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改选课情况。西安文理学院计算机科学系 课程设计报告31.2 课题要求与提示1.2.1 课题要求 假定有 n 门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于 60)自由选课。试设计一个选修课程系统,使之能提供以下功能:课程信息录入功能(课程信息用文件保存),即输入;课程信息浏览

15、功能,即输出;查询功能:(至少 2 种查询方式),即算法;按学分查询;按课程性质查询;学生选修课程(可选项,若完成可给予设计加分)。1.2.2 课题提示数据结构可用结构体,包括课程和选秀两个结构体,其中课程结构体包括课程编号, 课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期.选修结构体成员包括学号,课程编号,该结构体的建立主要是为了查询某门课程学生选修情况. 西安文理学院计算机科学系 课程设计报告4第二章 设计简介及系统大纲2.1 设计简介本系统的实现,全部采用链表这种数据结构,用链表实现课程的查找,添加,删除,课程的选修,追加选修的课程.课程信息采用结构体这种数据结构,

16、系统设计主要分为学生端设计和管理端设计。2.1.1 学生端的设计1-浏览所有课程2-查询课程信息3-选择选修课程4-浏览我选修的课程5-删除错选课程6-返回主菜单;2.1.2 管理端的设计1-浏览课程2-查询课程3-添加课程4-删除课程5-返回主菜单西安文理学院计算机科学系 课程设计报告52.2 系统流程主主 菜菜 单单管理员菜单管理员菜单浏览课程浏览课程查询课程查询课程添加课程添加课程删除课程删除课程学生菜单学生菜单浏览所有课程浏览所有课程查询课程信息查询课程信息选择选修课程选择选修课程浏览我选修的课程浏览我选修的课程删除错选的课程删除错选的课程西安文理学院计算机科学系 课程设计报告6图 2

17、1 系统流程图第三章 详细设计3.1 主函数,头文件及结构体声明主函数设计地比较简洁,只是提供一个主菜单,switch 语句将整个程序分为两个大的功能模块图 3-1 主界面 程序程序 #include #include #include #include #include typedef struct subjects /课程结构体课程结构体 int num; /课程编号课程编号 char name20; /课程名称课程名称 char kind10; /课程性质课程性质西安文理学院计算机科学系 课程设计报告7 int stime; /总学时总学时 int ttime; /授课学时授课学时 in

18、t etime; /实验或上机学时实验或上机学时 int score; /学分学分 int term; /开课学期开课学期 struct subjects *next;SUB;SUB *head=NULL;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:Manger

19、s() ;break;case 2:Students();break;case 3:w=0;break;default:; while(w=1); return 0;西安文理学院计算机科学系 课程设计报告83.2 管理员功能模块管理员的功能一共有四个功能:浏览,查询,添加,删除课程.运用字符串处理函数处理密码的问题,用一个 switch 语句实现函数的调用.图 3-2 管理员菜单 程序程序 void Mangers() /管理员登录菜单管理员登录菜单 int n,w=1,flag=0,i=3; char s8; char password=19901206; do printf(nnEnter

20、 password:); j=0;while(1)a=getch();if(a=13)break;sj=a;西安文理学院计算机科学系 课程设计报告9j+;printf(*);sj=0; 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 3 次!次! ex

21、it(0); /自动退出自动退出 do system(cls);puts(nntt*管理员菜单*nn);puts(tttt1-浏览课程n);puts(tttt2-查询课程n);puts(tttt3-添加课程n);puts(tttt4-删除课程n);puts(tttt5-返回主菜单); 西安文理学院计算机科学系 课程设计报告10puts(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();sav

22、efile();break; case 4:del();savefile();break; case 5:return; default:; while(w=1);3.3 学生功能菜单学生功能菜单包括六个功能:浏览课程,查询课程,选修课程,浏览我所选修的课程,添加选修课程,删除错选的课程,也是用到 switch 语句来调用函数图 3-3 学生菜单 程序程序 void Students() /学生登录菜单学生登录菜单西安文理学院计算机科学系 课程设计报告11int n,w=1; do system(cls); puts(nntt*学生菜单*nn); puts(tttt1-浏览所有课程n);put

23、s(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:prin();break; case 5:del();savefile1();break; case

24、 6:return; default:; while(w=1);3.4 创建链表模块 程序程序 SUB *create_form() /创建链表创建链表 SUB *head,*tail,*p; int num,stime,ttime; int etime,score,term;西安文理学院计算机科学系 课程设计报告12 char name20,kind10; int size=sizeof(SUB); head=tail=NULL; printf(输入选修课程信息:n);scanf(%d%s%s%d%d%d%d%d,&num,name,kind,&stime,&ttime,&etime,&sc

25、ore,&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-

26、next=NULL; return head;3.5 浏览模块浏览模块主要用管理员中的”浏览课程”和学生功能中的”浏览所有所有课程”,将所有的课程信息输出,即将 all_sub.txt 文件里面的内容全部输出 程序程序 void prin() /浏览所有课程浏览所有课程SUB *ptr;西安文理学院计算机科学系 课程设计报告13head=NULL;readfile();if(head=NULL)printf(nnt*NO RECORDS!*n);return;printf(课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n);for(ptr=head;ptr;pt

27、r=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);3.6 查询模块查询模块主要用于管理员功能中的”查询课程”和学生功能模块中的”查询所有课程”,查询模块共分为三个查询方法:按课程名称查找,按课程性质查找和按学分查找.switch 语句中,每一个 case 语句就是一中查询方法西安文理学院计算机科学系 课程设计报告14图 3-4 查询界面 程序程序 void search()

28、 /课程信息查询课程信息查询 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) casecase 1 1:printf(请输入要查找的

29、课程的名称:); /按课程名称查找按课程名称查找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%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);

30、西安文理学院计算机科学系 课程设计报告15goto L1; casecase 2 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%7dn,ptr-num,ptr-name,ptr-kind,ptr-stime,ptr-ttime,ptr-etime,ptr-sc

31、ore,ptr-term);t=0;if(t) printf(tn 未找到!n);t=1;system(pause);goto L1; casecase 3 3:printf(输入要查找的课程的学分:); /按学分查找按学分查找 scanf(%d,&num);printf(课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n);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,pt

32、r-ttime,ptr-etime,ptr-score,ptr-term);t=0;if(t) printf(nt 未找到!n);t=1;system(pause);goto L1;西安文理学院计算机科学系 课程设计报告16casecase 4 4:break; /退出查找退出查找3.7 插入链表模块插入链表操作主要用于添加课程,在整个课程信息中加入一些新课程,它在添加模块中被调用 程序程序 void *myInsert(SUB* subj) /链表插入操作链表插入操作 SUB *p1,*p2;p1=subj; if(head=NULL) head=p1; head-next=NULL; el

33、se for(p2=head;p2;p2=p2-next)if(p2-next=NULL) p2-next=subj; subj-next=NULL; break; eturn head;3.8 添加模块添加模块主要用于增加课程信息,采用链表的操作 程序程序 void *insert() /插入课程信息插入课程信息 西安文理学院计算机科学系 课程设计报告17SUB *ptr,*subj;int size=sizeof(SUB);char ch,ch1;while(ch!=0)subj=(SUB *)malloc(size);ptr=subj;printf(输入要插入的课程信息:n);print

34、f(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);print

35、f(ntt 请输入开课学期:);scanf(%d,&subj-term);myInsert(subj);printf(nn 继续插入请按回车n);printf(n 结束添加课程按 0: bb);ch1=getchar(); /*/*将回车键赋给将回车键赋给 CH1CH1,否则,否则subj-termsubj-term 输完后输入的回车键会赋给输完后输入的回车键会赋给 CHCH,因此用,因此用 CH1CH1 填补。填补。*/*/ch=getchar(); return head;3.9 删除模块删除模块主要用于管理员删除课程信息学生删除自己的选课,全部采用删除链表中的某一个节点的操作 程序程序

36、void *del() /删除课程删除课程-SUB *p1,*p2;char ch,ch1;int num;西安文理学院计算机科学系 课程设计报告18while(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(

37、n 继续删除请按回车n);printf(n 结束删除课程按 0: bb);ch1=getchar(); /将回车键赋给将回车键赋给CH1CH1,否则,否则 numnum 输完后再输入的回车键会赋给输完后再输入的回车键会赋给 CHCH,因此用,因此用 CH1CH1 填补。填补。ch=getchar();return head;system(pause);3.10 选修课程模块西安文理学院计算机科学系 课程设计报告19选修课程模块采用插入链表的操作, 程序程序 void choose() /选新课程选新课程SUB *p,*q;int a5;int num,total=0,i=0,j;printf(

38、输入要选修的课程的编号,编号之间以空格分开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);西安文理学院计算机科学系 课程设计报告20if(total60) printf(选修总学分为%d,未达到 60,选修失败!n,total);system(pause);elseFILE *fp;fp=fopen(my_sub.txt,w);fprintf(fp,课程

39、编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n);for(j=0;jnext)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,课程分别为:西安文理学院计算机科学系 课程设计报告21n,total);printf(n 课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开

40、课学期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 以上信息全部保存在my_sub.txt中n);system(pause);3.11 读取文件模块读取文件模块是用来读出文件内容,并将内容输出到内存中,当输入文件名时,就能打开指定的文件,当输入 all_sub.txt 时,打开所有课程信息的文件,当输入 my_sub.txt 时,就是浏览学生选修的课程信息 程序程序 void

41、 readfile() /阅读文件阅读文件 void *myInsert(SUB*);SUB *newSub; int num,stime,ttime,etime; int score,term; char c,name20,kind10,fname20; printf(请输入课程信息所在的文件名称:);scanf(%s,fname); 西安文理学院计算机科学系 课程设计报告22 FILE *fp;fp=fopen(fname,r); while(!feof(fp) if(c=fgetc(fp)=n)break; while(!feof(fp) newSub=(SUB*)malloc(size

42、of(SUB);fscanf(fp,%d%s%s%d%d%d%d%dn,&newSub-num,newSub-name,newSub-kind,&newSub-stime,&newSub-ttime,&newSub-etime,&newSub-score,&newSub-term); myInsert(newSub); fclose(fp);3.12 保存文件模块保存文件模块共分为两个子程序,分别是将修改的信息保存到 all_sub.txt和 my_sub.txt 文件中. 程序程序 void savefile() /保存文件保存文件( (一一) ) SUB *p; FILE *fp; fp=

43、fopen(all_sub.txt,w); if(fp=NULL)exit(0); fprintf(fp,课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学分 开课学期n);for(p=head;p;p=p-next) fprintf(fp,%5d%12s%9s%9d%9d%11d%11d%7dn,p-num,p-name,p-kind,p-stime,p-ttime,p-etime,p-score,p-term); fclose(fp); printf(创建后的信息已放入all_sub.txt文件中n);西安文理学院计算机科学系 课程设计报告23 system(pause);

44、void savefile1() /保存文件保存文件( (二二) ) SUB *p;FILE *fp;fp=fopen(my_sub.txt,w); if(fp=NULL)exit(0); fprintf(fp,课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学分 开课学期n); for(p=head;p;p=p-next) fprintf(fp,%5d%12s%9s%9d%9d%11d%11d%7dn,p-num,p-name,p-kind,p-stime,p-ttime,p-etime,p-score,p-term); fclose(fp); printf(创建后的信息已放

45、入my_sub.txt文件中n); system(pause); 西安文理学院计算机科学系 课程设计报告24第四章 设计结果及分析4.1 学生选课结果及分析学生选课结果及分析 4.1.14.1.1 学生选课实现功能学生选课实现功能 1.学生登录界面 2.查看所有课程信息 3.查询你想选的课程 4.选课 5.查看已选课程图 41 查看课程信息 图 42 管理员登录界面西安文理学院计算机科学系 课程设计报告25 6.返回系统4.1.24.1.2 选课结果分析选课结果分析 系统实现了学生选课的功能,但是不完整,例如没有实现二次选课的功能,没有实现选课数目的限制等。4.2 管理员结果及分析管理员结果及

46、分析4.2.14.2.1 管理员结果管理员结果1.管理员登录界面 2. 查看所有课程信息 3.删除一门课程 4. 增加一门课程 5.退出系统 4.2.24.2.2 分析分析 管理员模块实现了课程信息的录入,查看,删除等功能,但是没有实现学生选课情况的查看,学生成绩的保存等功能,管理能力不强,还需要加以改进以适应更多的学生。 图 43 管理员登录界面西安文理学院计算机科学系 课程设计报告26总 结通过该系统的课程设计分析,掌握了模块化设计的方法,理解和运用了结构化程序设计的思想和方法.掌握和提高了运用 C 语言进行程序设计的能力.程序设计的过程,实际上是确定解决问题的详细步骤,而这个步骤通常叫做

47、流程,在程序设计过程中理清楚整个问题的流程很重要,然后采取逐步细化的方法实现整个程序对于一个较大的应用程序,我们一般不可能一次就设计出一个很完善的系统.通常要先设计满足基本要求的系统.然后再测试或者在使用的过程中不断完善.慢慢地做成一个功能很完善选修课程管理系统.西安文理学院计算机科学系 课程设计报告27致 谢在本次课程设计中,我从指导老师老师身上学到了很多东西。老师认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我收益匪浅。他无论在理论上还是在实践中,都给与我很大的帮助,使我得到不少的提高这对于我以后的工作和学习都有一种巨大的帮助,感谢他细心而又耐心的辅导。另外,在系统开发过程中计算机

48、系其他老师也给了我很大的帮助,帮助解决了不少的难点,使得系统能及时开发完成,还有同组的几位同学的互相帮助,齐心协力,这里一并表示感谢。西安文理学院计算机科学系 课程设计报告28参考文献1. 严蔚敏,吴伟民.数据结构M.北京:高等教育出版社.2004;2. 谭浩强.C 语言程序设计M(第三版).北京:清华大学出版社.2010;3. 钱能.C+程序设计教程M(第二版).北京:清华大学出版社.2009.西安文理学院计算机科学系 课程设计报告29附录 完整程序代码#include #include #include #include #include typedef struct subjects i

49、nt 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; int size=sizeof

50、(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)西安文理学院计算机科学系 课程设计报告30 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;

51、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); fprintf(fp,课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学分 开课学期n); for(p=head;p;p=p-

52、next)fprintf(fp,%5d%12s%9s%9d%9d%11d%11d%7dn,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;西安文理学院计算机科学系 课程设计报告31fp=fopen(3.txt,w); if(fp=NULL)exit(0); fprintf(fp,课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学

53、时 学分 开课学期n); for(p=head;p;p=p-next)fprintf(fp,%5d%12s%9s%9d%9d%11d%11d%7dn,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

54、c,name20,kind10,fname20; printf(请输入课程信息所在的文件名称:);scanf(%s,fname); FILE *fp;fp=fopen(fname,r); while(!feof(fp) if(c=fgetc(fp)=n)break; while(!feof(fp) newSub=(SUB*)malloc(sizeof(SUB); fscanf(fp,%d%s%s%d%d%d%d%dn,&newSub-num,newSub-name,newSub-kind,&newSub-stime,&newSub-ttime,&newSub-etime,&newSub-sco

55、re,&newSub-term); myInsert(newSub); fclose(fp);void prin() /浏览所有课程SUB *ptr;西安文理学院计算机科学系 课程设计报告32head=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-k

56、ind,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()/插入课程信息 西

57、安文理学院计算机科学系 课程设计报告33 SUB *ptr,*subj; int size=sizeof(SUB); char ch,ch1; while(ch!=0) subj=(SUB *)malloc(size); 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,&

58、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,否则

59、 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);西安文理学院计算机科学系 课程设计报告34if(head=NULL)return NULL;p1=head;p2=head-next;while(p2)if(p2-num

60、=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();printf(n 删除完毕,新信息存入文件中n);system(pause); return head;system(pause);void choose()/选新课程-学生选课函数SUB *p,*q;int a5;int num,total=0,i=0,j;

61、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;西安文理学院计算机科学系 课程设计报告35i+;scanf(%d,&num);if(total60) printf(选修总学分为%d,未达到 60,选修失败!n,total);system(pause);elseFILE *fp;fp=fopen(3.txt,w);fprintf(fp,

62、课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n);for(j=0;jnext)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

63、)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.txt中n);system(pause);void search() /课程信息查询 int a,num; int t=1; char type10,min10; SUB *ptr; L1:system(cls);printf(nntt*请选择查询方式*n);西安文理学院计算机科学系 课程设计报告36 printf(nttt1-按课程名称查

64、找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);printf(课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n);for(ptr=head;ptr;ptr=ptr-next)if(strcmp(min,ptr-name)=0)

65、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); printf(课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n); for(ptr=head;ptr;ptr=ptr-next) if(str

66、cmp(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;西安文理学院计算机科学系 课程设计报告37 case 3:printf(输入要查找的课程的学分:); scanf(%d,&num); printf(课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n); 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;sy

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!