




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
高级语言程序设计课程设计报告课题名称学生选修课程设计姓名瞿寅班级物联网1612学号161003320237指导教师计春雷电子信息学院2017年6月29日目录1课题分析111问题描述112功能需求分析12系统设计221系统功能模块222数据结构设计223菜单设计224函数设计与说明325文件清单与说明33系统实现431密码登陆操作432创建链表533浏览所有链表信息634按条件查找课程735选课936浏览所有课程信息1037已选课程信息1238录入课程1239主菜单134测试数据与测试过程记录1541菜单测试1542系统功能测试155课程设计遇到的问题及解决方法226课程设计总结23参考文献24附件程序25学生选修课程系统11课题分析11问题描述当今时代是飞速发展的信息时代,在各行各业中离不开信息处理,这正是计算机被广泛应用于信息系统的环境。使用计算机不仅提高了工作效率,而且大大提高其安全性,计算机进行信息管理与信息系统的开发密切相关。为了管理好学生选课信息,建立一个学生选课系统,使学生选课信息管理工作规范化、系统化、程序化,避免学生选课管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效地查询和修改选课情况,并为学生更好地了解自己的学习进度提供方便,提高学生的选课效率。12功能需求分析假定有N门课程,每门课程有课程编号,课程名称,课程性质(考试、考查),总学时,学分,限选人数,剩余人数等信息,学生可按要求(如总学分不得少于60)自由选课。实现以下功能1系统以菜单方式工作;2课程信息和学生信息录入功能课程信息用文件保存;3课程信息浏览功能;4按课程性质查询查询功能至少两种查询方式,按学分查询、按课程性质查询5)显示学生选课情况学生选修课程系统22系统设计21系统功能模块按系统所需实现的功能要求,功能模块如图21所示。图21系统功能模块图22数据结构设计系统处理的数据主要是所选修课程的序号,名称,学分,性质,学时,和剩余容量,用C语言的结构体表示如下TYPEDEFSTRUCTSUBJECTSINTNUM/课程序号CHARNAME20/课程名称FLOATSCORE/课程学分CHARTYPE10/课程性质INTTIME/课程学时INTREMAIN/课程剩余容量STRUCTSUBJECTSNEXTSUB23菜单设计根据系统的功能要求,主菜单的主要设计如下PRINTF“学生选课系统N“PRINTF“主菜单N“PRINTF“请选择功能项(16)N“PRINTF“N1录入课程信息管理员模块N“PRINTF“2按条件查找课程N“PRINTF“3开始选课N“PRINTF“4查看已选课程情况N“PRINTF“5退出系统N“完成选择模块退出系统信息查看及储存学生选课查找课程信息录入课程信息菜单选择模块返回主菜单学生选修课程系统324函数设计与说明学生选修课程系统采用结构化程序设计思想,程序中除主函数外,设计了如下函数,函数的原型及功能说明如表21所示。表21函数列表序号函数原型功能说明1VOIDMENU主菜单2VOIDREMENU返回菜单3VOIDINSERT插入、添加课程信息4VOIDSAVEFILE将课程信息存到文件中5VOIDSHOWALL显示所有课程信息6VOIDSEARCH按条件查找课程7VOIDSELECT学生选课8VOIDSELECTED已选课程信息9VOIDSHOWFORM显示链表内容10VOIDENTER录入课程25文件清单与说明数据读写操作的实现主要以文件方式进行,该程序主要涉及以下文件文件1“所有课程TXT”/全部课程信息存放的文件文件2“已选课程TXT”/已选课程的详细信息文件3“登陆密码TXT”/默认管理员密码存放文件4“MYHEADH”/放一些全局变量和函数声明学生选修课程系统43系统实现31密码登陆操作此处的登录操作是一个返回INT类型值的函数,以文件的读取方式进行密码核对,并根据返回值在接下来需要进入的功能函数中进行判断如果输入的密码输入正确,则返回1,便可进入下一个功能模块;否则,返回0。流程图如图31所示。Y核对密码主菜单下一功能输入密码图31密码登陆流程图代码INTLOGINFILEFPCHARS10,CODE10FPFOPEN“登陆密码TXT“,“R“WHILEFEOFFPFSCANFFP,“S“,CODEPRINTF“请输入管理员密码“SCANF“S“,SIFSTRCMPS,CODEPRINTF“登陆成功“/SYSTEM“PAUSE“RETURN1学生选修课程系统5ELSEPRINTF“N密码错误N“RETURN0/密码登录操作32创建链表创建链表的实现是靠一个返回值类型为结构体指针的函数,并传入一个INT类型的参数,该参数主要用于根据用户层面的需要从而相对应的输入多少链表信息,再循环中以该参数为限定条件然后输入相应信息。整个过程中具体先要向系统申请SIZEOFSUB的内存空间,开始输入前还应注意清空输入缓存区,输入完成后,然后判断该结点是否是第一个结点,如果是则将其赋给头结点(HEAD)HEADPQP;如果不是则将其赋给链表尾部(QNEXT),然后就可以移动尾指针(即将该结点赋给Q)QNEXTPQP。最后一定要返回该链表的头指针。流程图如图32所示。创建链表完成结构体第一个结点设为头结点赋给尾部结点移动尾指针返回链表的头指针图32创建链表流程图代码SUBFORM_CREATEINTNSUBHEAD,P,QINTSIZESIZEOFSUB,I学生选修课程系统6HEADNULL/暂时不用的指针先赋空值FORI0INUM/PNUMNUMPRINTF“N课程名称N“SCANF“S“,PNAME/STRCPYPNAME,NAMEPRINTF“N课程性质N“SCANF“S“,PTYPE/STRCPYPTYPE,TYPEPRINTF“N课程学分N“SCANF“F“,/PSCORESCOREPRINTF“N课程学时N“SCANF“D“,/PTIMETIMEPRINTF“N课程余量N“SCANF“D“,/PREMAINREMAINPNEXTNULLIFI0HEADP/如果是第一个结点,构造的结点赋给头结点/ELSEQNEXTP/否则,插入结点到链表尾部,并移动链表的尾指针/QPRETURNHEAD/最后返回链表的头指针/创建链表从带头结点的尾部循环插入新结点33浏览所有链表信息为确保链表保存的信息准确无误,在创建好链表之后可以将链表的信息打印出来核对代码VOIDSHOWFORM学生选修课程系统7SUBPPRINTF“课程序号课程名称课程性质课程学分课程学时课程余量N“PSUBMALLOCSIZEOFSUBFORPHEADPPPNEXTPRINTF“5D12S12S92F9D9DN“,PNUM,PNAME,PTYPE,PSCORE,PTIME,PREMAIN/浏览所有链表信息34按条件查找课程查询模块提供两个查询方法按课程性质查找和按学分查找,SWITCH语句中,CASE1按课程性质查找相应课程;CASE2是按课程学分查找对应课程;CASE3则是返回主菜单操作。在查找过程中,以链表形式进行,结构体指针不为空时,循环一直进行,用IF语句判断,寻找相匹配的信息最后输出;若未查找到相应信息,则显示ELSE语句中的“未找到”。流程图如图33所示。查找课程按性质按学分退出查找图33查找课程流程图代码VOIDSEARCHINTA,B,CCHART10SUBPSYSTEM“CLS“PRINTF“请选择查询方式(13)N“PRINTF“1按课程性质查找N“PRINTF“2按课程学分查找N“PRINTF“3退出查找N“SCANF“D“,SWITCHACASE1PRINTF“请输入课程的性质(如专业基础课)N“PRINTF“返回则输入0N“SCANF“S“,T学生选修课程系统8IFT00SEARCHELSEPRINTF“课程序号课程名称课程性质课程学分课程学时课程余量N“FORPHEADPPPNEXTIFSTRCMPT,PTYPE0PRINTF“5D12S12S92F9D9DN“,PNUM,PNAME,PTYPE,PSCORE,PTIME,PREMAINC0IFCPRINTF“N未找到请重新查找。N“C1SYSTEM“PAUSE“SEARCHBREAKCASE2PRINTF“请输入所需课程的学分N“SCANF“D“,PRINTF“课程序号课程名称课程性质课程学分课程学时课程余量N“FORPHEADPPPNEXTIFPSCOREBPRINTF“5D12S12S92F9D9DN“,PNUM,PNAME,PTYPE,PSCORE,PTIME,PREMAINC0IFCPRINTF“N未找到请重新查找。N“C1SYSTEM“PAUSE“SEARCHBREAKCASE3REMENUBREAK/按条件查找课程学生选修课程系统935选课该模块主要是根据课程的序号选修相应课程,但在这里设置了学分要求(必须满60分),因此会有如下,判断如果所选的全部课程学分总和大于等于60分则,选课成功,并将所选修的课程信息存入文件“已选课程TXT”中。否则,选课失败,并显示当前选修了多少学分课程,此时需要重新选课。里面的主要实现还是根据链表形式首先从链表结构体的头指针开始,如果该指针未到空,则一直指向下一个结构体,直到遍历所有链表信息,然后结束循环,此间便可以进行学分的累加,课程序号的判断,以及最终课程信息的存储。流程图如图34所示。开始选课输入课程序号总学分达到60选课成功选课失败图34选课流程图代码VOIDSELECTSUBP,QFILEFPINTX5,M,N0,IINTTOTAL0PRINTF“N请输入要选修课程的序号(序号之间以空格分开)N“SCANF“D“,PRINTF“N完成选课请输入数字0即可提交N“WHILEM0FORPHEADPPPNEXTIFPNUMM学生选修课程系统10TOTALPSCOREXNMNSCANF“D“,IFTOTALNEXTIFQNUMXIFPRINTFFP,“5D12S12S92F9D9D“,QNUM,QNAME,QTYPE,QSCORE,QTIME,QREMAIN1FCLOSEFPPRINTF“N选修课程成功N“PRINTF“你总共选修了D学分的课程N“,TOTALPRINTF“N详细课程信息已存入文件“已选课程TXT”N“SYSTEM“PAUSE“REMENU/选课36浏览所有课程信息该模块主要是将之前录入的课程信息从文件“所有课程TXT”中读出并显示在屏幕上,比如在选课模块前就需调用此函数,才好进行选课操作。主要实现方法是用文件中FEOF函数,将其加入WHILE循环中(WHILEFEOFFP),如果没到文件结束处,则一直输出文件中的信息,即将课程信息以链表形式输出。知道文件结束,FEOF才返回非零值,此时循环将结束,注意需要关闭文件FCLOSEFP。流程图如图35所示。学生选修课程系统11浏览课程信息打开文件文件存在打开失败输出课程信息主菜单图35浏览课程信息流程图代码VOIDSHOWALLSUBPFILEFPIFFPFOPEN“所有课程TXT“,“R“NULLPRINTF“文件打开失败N“EXIT0PRINTF“课程序号课程名称课程性质课程学分课程学时课程余量N“WHILEFEOFFP/判断文件指针是否指向文件结束处(如果文件结束,则返回非0值,否则返回0)PSUBMALLOCSIZEOFSUBFSCANFFP,“DSSFDD“,/注意使用FSCANF读取文本信息时,必须在读取操作前打开文件PRINTF“5D12S12S92F9D9DN“,PNUM,PNAME,PTYPE,PSCORE,PTIME,PREMAINFCLOSEFP37已选课程信息此处的功能是为了便于查看所选课程的信息,主要是通过文件操作将之前选课成功后所保存在“已选课程TXT”中的内容输出,此时可以发现课程的余学生选修课程系统12量相比于未选时的都减少了1。代码VOIDSELECTEDSUBPFILEFPIFFPFOPEN“已选课程TXT“,“R“NULLPRINTF“课程序号课程名称课程性质课程学分课程学时课程余量N“WHILEFEOFFPPSUBMALLOCSIZEOFSUBFSCANFFP,“DSSFDD“,PRINTF“5D12S12S92F9D9DN“,PNUM,PNAME,PTYPE,PSCORE,PTIME,PREMAINFCLOSEFPELSEPRINTF“N打开失败N“SYSTEM“PAUSE“REMENU/已选课程信息38录入课程流程图如图36所示Y图36录入课程信息流程图代码VOIDENTERINTM,N,I3MLOGIN录入课程信息输入数据保存学生选修课程系统13SYSTEM“PAUSE“WHILEI0IFMSYSTEM“CLS“PRINTF“请输入课程数N“SCANF“D“,HEADFORM_CREATENSAVEFILESHOWFORMBREAKELSEPRINTF“请重新输入还可以输入D次“,IMLOGINISYSTEM“PAUSE“REMENU/录入课程39主菜单代码VOIDMENU/STATICSUBHEADINTINDEXPRINTF“学生选课系统N“PRINTF“主菜单N“PRINTF“请选择功能项(16)N“PRINTF“1录入课程信息管理员模块N“PRINTF“2按条件查找课程N“PRINTF“3开始选课N“PRINTF“4查看已选课程情况N“PRINTF“5退出系统N“SCANF“D“,SWITCHINDEXCASE1ENTERBREAKCASE2SEARCH学生选修课程系统14BREAKCASE3SHOWALLSELECTBREAKCASE4SELECTEDBREAKCASE5EXIT0BREAKDEFAULTSYSTEM“CLS“PRINTF“输入有误请键入数字16N“REMENUBREAK/主菜单学生选修课程系统154测试数据与测试过程记录41菜单测试程序运行开始,首先显示主菜单,可根据提示进入响应功能模块。如图41所示。图41系统运行主界面42系统功能测试1)密码登陆操作(文件操作)文件中正确密码12345,如果密码错误重新输入,密码只能输入3次,3次以后则退出系统,如果密码输入正确则进入管理员模块,便可进行录入课程信息操作。如图42所示。图42登录密码操作界面2)录入课程登陆成功后可以首先进行链表创建操作,如图43所示,用户先输入所需录入的课程数(本次测试录入5门课程)学生选修课程系统16图43录入课程界面需输入的内容有课程编号、课程名称、课程性质、课程学分、课程学时、课程余量。如图44所示。图44输入课程信息界面3)浏览所有链表(课程)信息录好的课程已存入文件中。如图45所示图45链表信息界面学生选修课程系统174)按条件查找课程根据提示信息键入数字。如图46所示。图46选择功能项界面首先按课程性质查找如图47所示。图47按课程性质查找界面再按学分查找。如图48所示。学生选修课程系统18图48按学分查找界面如果没有相关的课程信息,则显示未找到,如图49所示。图49查找失败界面按3退出查找,并返回主菜单。如图410所示。图410退出系统界面5)选课下面可以进行选课了,首先屏幕会自动显示所有课程信息(从文件写出)。学生选修课程系统19如图411所示。图411所有课程信息界面输入相应课程序号,进行选课,所选课程总学分满60分,否则选课失败。如图412、图413分别显示了选课成功与选课失败界面图412选课成功界面学生选修课程系统20图413选课失败界面6)已选课程信息选课成功后可以在此查看选课情况,对比可以发现选完后的课程余量已经减1。如图414、图415分别显示了选课前和选课后的信息界面。图414选课前信息界面学生选修课程系统21图415选课后信息界面学生选修课程系统225课程设计遇到的问题及解决方法从文件读取链表信息所遇到的问题问题内容FSCANFFP,“5D12S12S92F9D9D“,在进行文件读取并输出时出现了多余的乱码。问题分析FSCANFFP,“5D12S12S9F9D9D“,在进行文件数据读取时,DFS部分不能进行域宽显示的操作,只能在输出的时候使用。;解决方法修改格式符,改成FSCANFFP,“DSSFDD“,学生选修课程系统236课程设计总结通过这次课程设计,深刻了解到了C语言这门课程的重要性。现在生活中的信息数据处理是离不开电子信息的,而C语言是根本,也是基础。本次课设是我们团队一起完成的,大家都有明确的分工,当然在这个过程中我们遇到了很多问题,并不是一个人去埋头苦干,而是大家一起帮忙想办法去解决,编程的过程中总是一部分可以了,另一部分又出了问题,但最后通过大家的努力和老师的帮助这些都解决了,做的过程很伤脑,但完成了之后会发现自己学到了很多,是课堂上所不能学到的。在这次课程设计中,我们首先对系统的整体功能进行了构思,然后用结构化分析方法进行分析,将整个系统清楚的划分为几个模块,再根据每个模块的功能编写代码。而且尽可能的将模块细分,最后在进行函数的调用。我们在函数的编写过程中,我们不仅用到了FOR循环、WHILE循环和SWITCH语句,还用到了函数之间的调用(包括递归调用)。时长为一周的课程设计即将结束,时间虽短,但是我们都收获了很多。最后,谢谢老师和同学们的指导,更要感谢我们小组成员之间的合作与交流。学生选修课程系统24参考文献1吉顺如主编计春雷主审C程序设计习题集与课程设计指导,电子工业出版社201292郭翠英C程序课程设计案例精编中国水利电出版社20042学生选修课程系统25附件程序INCLUDEINCLUDEINCLUDEINCLUDEINCLUDE“MYHEADH“INTLOGINFILEFPCHARS10,CODE10FPFOPEN“登陆密码TXT“,“R“WHILEFEOFFPFSCANFFP,“S“,CODEPRINTF“请输入管理员密码“SCANF“S“,SIFSTRCMPS,CODEPRINTF“登陆成功“RETURN1ELSEPRINTF“N密码错误N“RETURN0/密码登录操作SUBFORM_CREATEINTNSUBHEAD,P,QINTSIZESIZEOFSUB,IHEADNULL/暂时不用的指针先赋空值FORI0INUMPRINTF“N课程名称N“SCANF“S“,PNAMEPRINTF“N课程性质N“SCANF“S“,PTYPEPRINTF“N课程学分N“学生选修课程系统26SCANF“F“,PRINTF“N课程学时N“SCANF“D“,PRINTF“N课程余量N“SCANF“D“,PNEXTNULLIFI0HEADP/如果是第一个结点,构造的结点赋给头结点/ELSEQNEXTP/否则,插入结点到链表尾部,并移动链表的尾指针/QPRETURNHEAD/最后返回链表的头指针/创建链表从带头结点的尾部循环插入新结点VOIDSAVEFILESUBPFILEFPIFFPFOPEN“所有课程TXT“,“W“NULLPRINTF“文件错误“EXIT0FORPHEADPPPNEXTFPRINTFFP,“5D12S12S92F9D9D“,PNUM,PNAME,PTYPE,PSCORE,PTIME,PREMAINPRINTF“N课程信息已保存(文件所有课程TXT中)N“FCLOSEFP/保存课程信息至文件中VOIDSHOWALLSUBPFILEFPIFFPFOPEN“所有课程TXT“,“R“NULLPRINTF“文件打开失败N“EXIT0PRINTF“课程序号课程名称课程性质课程学分课程学时课程余量N“WHILEFEOFFP/判断文件指针是否指向文件结束处(如果文件结束,则返回非0值,否则返回0)学生选修课程系统27PSUBMALLOCSIZEOFSUBFSCANFFP,“DSSFDD“,/注意使用FSCANF读取文本信息时,必须在读取操作前打开文件PRINTF“5D12S12S92F9D9DN“,PNUM,PNAME,PTYPE,PSCORE,PTIME,PREMAINFCLOSEFPVOIDSHOWFORMSUBPPRINTF“课程序号课程名称课程性质课程学分课程学时课程余量N“PSUBMALLOCSIZEOFSUBFORPHEADPPPNEXTPRINTF“5D12S12S92F9D9DN“,PNUM,PNAME,PTYPE,PSCORE,PTIME,PREMAIN/浏览所有链表信息VOIDSEARCHINTA,B,CCHART10SUBPSYSTEM“CLS“PRINTF“请选择查询方式(13)N“PRINTF“1按课程性质查找N“PRINTF“2按课程学分查找N“PRINTF“3退出查找N“SCANF“D“,SWITCHACASE1PRINTF“请输入课程的性质(如专业基础课)N“PRINTF“返回则输入0N“SCANF“S“,TIFT00SEARCHELSEPRINTF“课程序号课程名称课程性质课程学分课程学时课程余量N“FORPHEADPPPNEXTIFSTRCMPT,PTYPE0学生选修课程系统28PRINTF“5D12S12S92F9D9DN“,PNUM,PNAME,PTYPE,PSCORE,PTIME,PREMAINC0IFCPRINTF“N未找到请重新查找。N“C1SYSTEM“PAUSE“SEARCHBREAKCASE2PRINTF“请输入所需课程的学分N“SCANF“D“,PRINTF“课程序号课程名称课程性质课程学分课程学时课程余量N“FORPHEADPPPNEXTIFPSCOREBPRINTF“5D12S12S92F9D9DN“,PNUM,PNAME,PTYPE,PSCORE,PTIME,PREMAINC0IFCPRINTF“N未找到请重新查找。N“C1SYSTEM“PAUSE“SEARCHBREAKCASE3REMENUBREAK/按条件查找课程VOIDSELECTSUBP,QFILEFPINTX5,M,N0,IINTTOTAL0PRINTF“N请输入要选修课程的序号(序号之间以空格分开)N“SCANF“D“,学生选修课程系统29PRINTF“N完成选课请输入数字0即可提交N“WHILEM0FORPHEADPPPNEXTIFPNUMMTOTALPSCOREXNMNSCANF“D“,IFTOTALNEXTIFQNUMXIFPRINTFFP,“5D12S12S92F9D9D“,QNUM,QNAME,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 本科html考试试题及答案
- 北京高中数学考试卷子及答案
- N6-Allylamino-carbonothioyl-lysine-13C6-15N2-生命科学试剂-MCE
- 电焊工焊接知识培训总结课件
- hu3S193-生命科学试剂-MCE
- 保险金融资格考试题库及答案
- 新解读《GB-T 2999-2016耐火材料 颗粒体积密度试验方法》
- 高楼居民安全知识培训课件
- 电炉操作知识培训课件
- 电源线缆安全知识培训课件
- 新生儿病房护理安全管理
- 瑞雪迎春春节家宴主题说明书
- 军用车修理知识培训课件
- 乘客遗失物品处理课件
- 2025年云南省中考物理真题(含答案)
- 医院保卫科岗位竞聘工作汇报
- 医院科室停电应急预案
- 2025年教育学家教学理论考试试题及答案解析
- 2025年职业指导师中级专业能力试卷:就业指导实务操作技能
- 保健公司客户服务流程规定
- 项目初步验收汇报
评论
0/150
提交评论