学生选课系统程序设计文档.doc_第1页
学生选课系统程序设计文档.doc_第2页
学生选课系统程序设计文档.doc_第3页
学生选课系统程序设计文档.doc_第4页
学生选课系统程序设计文档.doc_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

*实践教学* 兰州理工大学计算机与通信学院2015年春季学期 C程序设计 课程设计题 目: 学生选课系统 专业班级:信息与计算科学姓 名: 陶明玉 学 号: 1409510107 指导教师: 张墨逸 成 绩:_ 前 言数据库是从60年代初发展起来的计算机技术。经过四十来年的发展,数据库技术己经趋于成熟。Web数据库在新的Internet环境中发生了很大的变化。就数据应用而言呈现出多样化的空间,如数字图书馆、电子出版物、电子商务、远程教育系统等的出现,给web数据库技术提出了更多、更高的要求。同时,随着国内高校校园网的建设,基于互联网的应用系统的开发正在蓬勃发展并发挥着较大的作用。例如,我国许多高校的网上招生系统,学校的各种管理信息系统,学校选课系统,还有一些医学院校开发出的网上诊所、远程诊断系统等等,都是基于校园网的应用系统。 国外的教学科研软件与国内相比开发的早而且比较成熟。早在七十年代末,美国就建成了NSFNET(国家科学基金网),其课题的申报及课题的进展情况汇报都在网上进行。其网上教学教务管理系统也十分完善,世界各地的学生可以坐在家里通过互联网完成入学报名、选课、考试、毕业论文、取得学位这一学习生活的全过程。目前,国际上已具规模的远程教育学校就有数百所之多,网上教育正在各地发挥着巨大的作用,为世界各国培养出大批人才。所有这些都表明,基于Internet的校园网的应用已深入到校园内的各个方面。摘 要建立一个“学生选课系统”,系统以菜单的方式工作。编写存放的程序包含被选课的信息,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息。学校管理员首先录入可供学生选择的课程,然后学生可按要求(如总学分不得少于30)自由选课。通过子函数的编写,能对这些课程信息进行录入,浏览,查询,修改,选择功能。并将这些信息存入文件中。最后录入课程信息,进行测试,实现程序运行。关键词:学生选课,选修学分,授课学时,课程信息,课程添加2目 录 1题目要求12需求分析12.1 产品需求概述12.1.1 功能简介12.1.2 运行环境12.2 功能需求22.2.1添加课程功能22.2.2 删除课程功能22.2.3 查询功能22.2.4学生选课功能22.2.5学生查看已选课程功能22.2.6学生删除已选课程功能22.2.7不支持的功能22.3 数据描述33概要设计33.1 系统体系结构图33.1.1 模块描述44详细设计54.1 系统主要函数说明54.2菜单函数54.3添加课程函数64.4删除课程函数74.5查看课程函数84.6选课函数95 系统测试105.1主菜单115.2以管理员身份登录5.2.1添加课程信息5.2.2浏览课程信息5.2.3查询课程信息5.2.4删除课程信息145.3以学生身份登录155.3.1浏览所有课程165.3.2选择选修课程16参考文献16致 谢附录:22源程序221题目要求(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.02.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 name20; /*课程名称*/ char kind10; /*课程性质*/ int stime; /*总学时*/ int ttime; /*授课学时*/ int etime; /*实验或上机学时*/ int score; /*学分*/ int term; /*开课学期*/3概要设计3.1 系统体系结构图 本系统首先分为两个模块:管理员模块和学生模块。管理员进入程序需要输入密码。学生模块分为:1.浏览所有课程,2.选择课程,3.删除选择错误的课程,4.修改已选择的课程,5.查看已选择的课程。管理员模块分为:1.录入供选择的课程,2.查看所有课程,3.修改已有课程,4.删除课程。学生选课系统以管理员身份登录以学生身份登录1.浏览课程3.选择选修课程4.浏览我选修的课程5.删除错误课程2.查询课程4.删除课程5.返回主菜单2.查询课程信息1.浏览所有课程6.返回主菜单3.添加课程 图1.系统体系结构图其中:1. 添加课程包括课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息;2. 查询课程可以根据课程编号、名称、学分查看课程;3. 删除课程是删除错误课程,或者不想选择的课程。3.1.1 模块描述 模块1: 管理员入口名 称管理员入口标识 in子系统名 称以管理员身份系统名称学生选课系统接口说明输入1输出Enter password功能说明管理员操作的入口,用户根据帐号、密码登录进入运行环境说明运行于普通的服务器上,用户通过VC+6.0版本客户端进行操作调用关系说明调用模块浏览、查询、添加、删除被调用模块主菜单模块2: 学生入口名 称学生入口标识 in子系统名 称以学生员身份系统名称学生选课系统接口说明输入2输出Enter password功能说明学生操作的入口,用户根据帐号、密码登录进入运行环境说明运行于普通的服务器上,用户通过VC+6.0版本客户端进行操作调用关系说明调用模块浏览、查询、选课、退选、已选查询被调用模块主菜单4详细设计4.1 系统主要函数说明 函数名称函数功能savefile()保存文件prin()浏览所有课程insert()插入课程信息del()删除课程choose()选课函数 各函数调用图:Mangers()Students()exitprin() search() insert() del() returnreadfile() savefile()readfile() savefile1() readfile() savefile1()prin() search() choose() prin() del() return主函数图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所示。按课程编号查看13选择查看类型按课程名称查看按学分查看2返回继续查看否是图6.查看课程函数首先打开课程储存文件,进入查看课程界面后,可以选择按课程编号查看,按课程名称查看和按学分查看三种查看方式。查看课程完成后则返回上一个菜单界面。4.6选课函数选课函数choose(),学生进入之后,输入想选的课程,空格隔开,结束回车,如果总学分不够6,选修失败,重新选修。如图7所示:进入选课 退出 输入课程编码学分30 ? 选修成功是否 图7.选课在选课函数中,学生被要求选修科目不超过6门,总学分不能低于30,当超过6门时,程序则会停止运行,学分低于30分则要求重新进行选课。5 系统测试5.1主菜单图85.2以管理员身份登录在图8中输入1,进入如下所示界面。图95.2.1添加课程信息图105.2.2浏览课程信息 图115.2.3查询课程信息图125.2.4删除课程信息v图135.3以学生身份登录在图8中输入2,进入如下所示界面。图145.3.1浏览所有课程图155.3.2选择选修课程图165.3.3浏览我选修的课程图175.3.4删除选错的选修课程图18总结在这次课程设计中,我主要负责系统程序的代码编写和调试工作,通过这次课程设计我学会了很多东西,更好的掌握了C程序设计中的一些知识。诚然,这次课程设计让我感触很深,通过这次课程设计,我掌握了常用函数的识别和测试;熟悉了常用系统的原理;了解了程序的运行方法,以及如何提高程序的性能等等,掌握了很多编程的方法,通过查询资料,也了解了网站的构造及原理。 回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。 实验过程中,也对团队精神的进行了考察,让我们在合作起来更加默契,在成功后一起体会喜悦的心情。果然是团结就是力量,只有互相之间默契融洽的配合才能换来最终完美的结果。在这里,我也对我的课设搭档说一声辛苦了。 确实,人是需要不断的磨练的 ,在这次课程设计的磨练中,也让我体会到了以后工作的辛苦,所以我应该更加的努力,为更好的明天而奋斗。参考文献1 C/C+程序设计教程(第二版),王连相,中国铁道出版社,20112 C语言程序设计,谭浩强,清华大学出版社,19993 C程序设计题解与上机指导,谭浩强,清华大学出版社,19994 C/C+程序设计上机指导与测试(第二版),王连相,中国铁道出版社,20115 C语言函数手册,机械工业出版社,19996 C语言的实际应用,安徽科学技术出版社,2000 致 谢在这为期两周的课设时间里,诚然,我是抱着虚心的态度求教。在此期间,让我发现了我在C程序设计方面的很多不足,还需要很多的提升,然而在张墨逸老师悉心的指导和同学们的帮助下,帮我解决了很多的问题,让我得以顺利的完成这次课程设计,更为重要的是我从他们的身上学到了许多的知识。我相信,在今后的发展道路上,我必定会受益匪浅。当然,我更要感谢这些帮助过我的人,没有他们的帮助,也许我的课程设计将会完成的很不好。在此,对这些帮助过我的人表以深深的感谢!附录:源程序#include #include #include #include void prin1(); void choose(); 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; 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%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; 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%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 c,name20,kind10,fname20; FILE *fp; fp=fopen(2.txt,r); 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-score,&newSub-term); myInsert(newSub); fclose(fp); 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); 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%dn,&ptr-num,ptr-name,ptr-kind,&ptr-stime,&ptr-ttime,&ptr-etime,&ptr-score,&ptr-term); 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); 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(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(); printf(n删除完毕,新信息存入文件中n); system(pause); return head; system(pause); void choose()/选新课程-学生选课函数 SUB *p,*q; int a5; 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(total60) 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=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.txt中n); system(pause); 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); 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); 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%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); 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; system(pause); goto L1; case 4: break; void Mangers() int n,w=1,flag=0,i=3; char s8; char password7=1; do printf(nnEnter passwo

温馨提示

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

评论

0/150

提交评论