*******************实践教学*******************兰州理工大学计算机与通信学院2011年春季学期C程序设计课程设计题目:学生选课系统专业班级:通信工程1班姓名:学号:指导教师:周小健成绩:摘要学生选课系统是一个教育单位不可缺少的重要系统组成部分,它对于学校的决策者、管理者管理、查看课程来说都有至关重要,所以学生选课管理系统应该能够为广大学、师生提供充足的信息和快捷的课程选择过程,有助于学生选好每一门课程,此系统系统选课方便、快捷,用简单的界面来展示学生的选课信息,应用简单明了、存储量大、可靠性高、保密性好、寿命长、成本低等优点,可以极大的提高对学生信息管理的效率。利用C语言开发,实现了简单的学生课程信息的录入、修改、查询、删除等操作,并且能够利用文件系统长久的保留原始数据。目录一、需求分析.............................................................................................1二、总体设计.............................................................................................1三、详细设计.............................................................................................21、数据定义.........................................................错误!未定义书签。2、算法流程图.....................................................................................2四、编码.....................................................................................................6五、调试.....................................................................................................7六、设计总结...........................................................................................10致谢...........................................................................................................11参考文献...................................................................................................12附录...........................................................................................................131一、需求分析语言文字描述系统要做什么数据结构可用结构体,包括课程和选修两个结构体,其中课程结构体成员结构体成员包括课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期。选修结构体成员包括学号,课程编号,该结构体的建立主要是为了查询某门课程学生选修情况。二、总体设计系统由哪几个功能模块构成,给出功能模块图。C中模块化的工具是函数根据上面的需求分析,可以将这个系统的设计分为如下七大模块:选课模块、按学分查找模块、按编号查找模块、查看课程模块、查看选课情况模块、课程输入模块、完成选择模块。菜单选择模块录入学生信息学生选课系统信息查看及储存退出系统完成选择模块学生信息管理录入课程信息课程管理2三、详细设计1.数据定义2,算法流程图(1)录入课程信息表显示一系列功能选项输入n,判断n是否是1-7根据n的值调用各功能模块函数录入课程信息从文件输入输入课程编号保存信息到student.txt显示录入成功,转入完成选择菜单3(2)课程管理Y(3)录入课程信息Y录入课程信息输入数据保存显示失败新增课程输入课程信息保存4(4)学生信息管理YY(5)学生选课查询可选课程查询已选课程返回主菜单输入学号输入学号新增学生信息或删除学生信息输入姓名,考号.保存学生选课5(6)系统信息及查看系统(7)退出系统系统信息及查看系统查看课程信息查看学生信息存储信息返回主菜单存储课程信息存储学生信息返回主菜单输入路径,保存完成选择菜单模块退出系统主菜单6四、编码1.structcouse*head1;结构2.voidkeyboardc()//录入课程子函数(从键盘录入)3.voidfilec()//录入键盘子函数(从文件录入)4.voidinputc()//录入课程主函数5.voidinsertc(structcouse*incouse)//课程管理子函数(增加课程)6.voiddelc(intnum1)//课程管理子函数(删除课程)7.voidelect(structstudent*s)//选课8.voidcheak()//学生选课子函数(查询可选课程)9.voidback(structstudent*p)//退课10.voidhcheak()//学生选课子函数(查询已选课程)11.voidelective()//学生选课主函数12.voidlistc()//输出课程信息13.voidlists()//输出学生信息14.voidintoc()//存储课程信息15.voidintos()//存储学生信息16.voidinto()//存储信息17.voidstore()//信息主函数18.intmain()//主函数7五、测试1.主菜单2.录入课程信息83,从文件输入4,学生选课菜单95,学生信息管理6,管理员输入课程信息界面:10六、设计总结问题一:无法读取文txt文件。困难就是txt无法读取,输入路径后没有文件显示。解决办法是,向老师求助。最后,在老师细心的指导下,才知道是自己的计算机操作水平缘故,没有很好的了解计算机路径结构,最后做出了一定的修改,才得以实现。问题二:程序错误。这是一个比较典型的错误,通过查阅书本相关资料。才发觉是函数相关问题,没有能够很好的理解函数思想,导致程序运行错误。11致谢在这次c语言课程设计中,首先得感谢周老师给予我们指导与帮助,在她的指导帮助下,才使得我们能够顺利的完成课程设计,更重要的是在这次课程设计中,极大的提高我的c语言设计能力,也让我深刻的了解到自己在这方面的诸多不足,使得我能更清楚的了解自己的水平,加强了我对这门学科的认识。同时也感谢和我一起完成这课设的王云龙同学,我们在互相交流帮助中也相互学习到许多小的应用技巧,解决了一些列问题。还要感谢那些给予我们帮助的同学,也给了我很大的帮助。12参考文献1.姜灵芝,余健.C语言课程设计案例精编.北京:清华大学出版社,20082.王新,孙雷.C语言课程设计.北京:清华大学出版社,20093.游洪跃、彭骏、谭斌.C语言程序设计实验与课程设计教程.北京:清华大学出版社,20114.王连相.C/C++程序设计上机指导与测试.北京:中国铁道出版社,20065.C语言函数手册,机械工业出版社,199913附录#includestdio.h#includestdlib.hintN1,N2,kk1,kk2,kk3;structcouse*head1;structstudent*head2;structcouse//课程信息结构体{intnum1;//课程编号charname1[20];//课程名称charxinzhi[30];//课程性质iintztime;//课程总学时intstime;//授课学时intshiyan;//实验学时intscore;//学分longintdate;//开学学期intnelepeo;//课程已选人数intMelepeo;//课程人数上限structcouse*next;};structstudent//学生信息结构体{intnum2;charname2[20];intnelenum[50];//已选课程编号intnelen;//已选课程数量structstudent*next;};voidMs(){for(kk1=0;kk11100;kk1++)for(kk2=0;kk21200;kk2++)for(kk3=0;kk31200;kk3++);}voidkeyboardc()//录入课程子函数(从键盘录入){structcouse*p1,*p2;N1=0;p1=p2=(structcouse*)malloc(sizeof(structcouse));printf(课程编号课程名称课程性质总学时授课学时实验学时学分开课学期人数14上限\n);scanf(%d%s%s%d%d%d%d%d,&p1-num1,p1-name1,&p1-xinzhi,&p1-ztime,&p1-stime,&p1-shiyan,&p1-score,&p1-date,&p1-Melepeo);p1-nelepeo=0;head1=NULL;while(p1-num1!=0){N1=N1+1;if(N1==1)head1=p1;elsep2-next=p1;p2=p1;p1=(structcouse*)malloc(sizeof(structcouse));scanf(%d%s%s%d%d%d%d%d,&p1-num1,p1-name1,&p1-xinzhi,&p1-ztime,&p1-stime,&p1-shiyan,&p1-score,&p1-date,&p1-Melepeo);p1-nelepeo=0;}p2-next=NULL;}voidfilec()//录入键盘子函数(从文件录入){FILE*fp;charfilepath[20];structcouse*p1,*p2;N1=0;printf(输入要读入的文件路径:);getchar();gets(filepath);if((fp=fopen(filepath,r))==NULL){printf(找不到%s文件!\n,filepath);exit(0);}p1=p2=(structcouse*)malloc(sizeof(structcouse));fscanf(fp,%d%s%s%d%d%d%d%d,&p1-num1,&p1-name1,&p1-xinzhi,&p1-ztime,&p1-stime,&p1-shiyan,&p1-score,&p1-date,&p1-Melepeo);printf(课程编号课程名称课程性质总学时授课学时实验学时学分开课学期人数上限\n);fprintf(stdout,%d\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n,p1-num1,p1-name1,p1-xi15nzhi,p1-ztime,p1-stime,p1-shiyan,p1-score,p1-date,p1-Melepeo);head1=NULL;while(!feof(fp)){N1=N1+1;if(N1==1)head1=p1;elsep2-next=p1;p2=p1;p1=(structcouse*)malloc(sizeof(structcouse));fscanf(fp,%d%s%s%d%d%d%d%d,