C语言学生选课管理系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

《学生选课系统》1需求分析1.1任务要求制做学生选课系统,共包括课程信息和学生信息两部分。课程信息包括:课程编码、课程名称、适用专业、课程类型(必修、限选、必选、实践、学习)、学分、学时、主讲教师等。学生信息管理,学生选课管理(学生选课学分总数有一定范围),学生可以对课程进行查询、浏览,选完课后可以退选、重选,并可以按学号、姓名进行查询和统计。要求:1.源文件采用多文件的工程结构。2.数据储存采用文件形式。3.标准的C输入输出。4.功能完善,适当的注释。5.关于文件的内容要自学。1.2系统功能需求分析1.为存储课程信息,需要定义一个结构体类型,成员包括课程编码、课程名称、适用专业、课程类型、学分、学时、主讲教师,所选人数等等,并建立链表,定义该结构体类型的指针,用于指向各节点;2.为存储学生信息,需要定义一个结构体类型,成员包括学生编码、学生姓名、所选课程编码、所选课程学分和等等,并建立链表,定义该结构体类型的指针,用于指向各节点;3.对于课程信息和学生信息,可以选择从键盘输入也可选择从文件中打开原来存盘的信息,并对他们分别建立添加、删除、浏览、查询等功能的子函数,完成相应的功能,对程序实现模块化。这其中要用到对链表的删除、插入、增加等知识。删除包括课程删除和学生信息删除,删除时用一结构体指针指向链表的第一个结点,检查该节点的值是否等于输入的要删除的课程编号或学生学号,若相等就删除,不相等则后移指针,直至表尾。插入时也要先找到相应结点,再添加。查询课程信息从文件录入从键盘录入增加删除学生信息从文件录入从键盘录入增加删除选课退课信息存储功能要设置按照学生姓名、学生编号等多种方式。4.学生选课是要先输入自己的学号,如果在已经输入的学生信息中找不到此学号,则提示需要先输入自己的信息。如找到了自己的学号,则可以进行选课。在选课之前要先对所有的课程信息进行浏览。选课有一定的学分限制,超过相应的学分(这里设置的是10个学分),系统就会显示可以选满的信息。此系统还可以实现删除所选课程的功能,设计思路与选课功能相似。5.为实现存储功能,需用到文件的相关函数,打开文件,将添加、修改或删除的信息存入磁盘中。6.实现易于使用者理解和使用的友好界面。2概要设计2.1系统总体设计框架对程序进行模块化可以使整个程序清晰明了。对课程信息和学生信息建立从文件中输入、从键盘中输入、添加、删除、查询和浏览的功能,其各个子函数中运用链表储存数据。选课管理建立学生选课、推选、查询、浏览的功能,其各个子函数中运用链表储存数据。从主函数开始执行,依次调用各个子函数,并运用文件的相关知识将信息进行存盘。2.2系统功能模块图学生选课系统3详细设计3.1功能模块设计思路主要功能模块的算法设计思路如下:1、课程信息录入函数(voidload())①从键盘录入(voidzhang())I定义指向结构体变量的指针;II从头指针指向的结构体开始依次录入结构体中所包含的各个成员;III直到输入的结构体成员的编号为0,录入结束②从文件录入(voidzhang1())I分别定义指向结构体变量的指针和指向文件的指针;II输入文件的路径,打开文件,若没有找到则有提示;III将文件中的信息依次读出,最后结构体的指针为NULL2、课程信息管理(voidmanagementc())①增加课程信息(voidinsert(structcourse*incourse))I定义指向结构体变量的指针;II输入要增加的课程编号,从头指针指向的结构体依次向后,直到链表的最后;III输入课程结构体各个成员的信息,使最后一个结构体指针值为NULL②删除课程信息(voiddelc(intnum1))I定义指向结构体变量的指针;II输入要增加的课程编号,从头指针指向的结构体依次向后,直到找到课程编号为输入值的那个结构体;III将其删除,其前一个的结构体指针指向其后一个结构体3、学生信息录入函数(voidinput())①从键盘录入(voidputin())I定义指向结构体变量的指针;II从头指针指向的结构体开始依次录入结构体中所包含的各个成员;III直到输入的结构体成员的编号为0,录入结束②从文件录入(voidputin2())I分别定义指向结构体变量的指针和指向文件的指针;II输入文件的路径,打开文件,若没有找到则有提示;III将文件中的信息依次读出,最后结构体的指针为NULL4、学生信息管理(voidmanagements())①增加学生信息(voidinserts(structstudent*incouse))I定义指向结构体变量的指针;II输入要增加的学生编号,从头指针指向的结构体依次向后,直到链表的最后;III输入学生结构体各个成员的信息,使最后一个结构体指针值为NULL②删除学生信息(voiddels(intnum2))I定义指向结构体变量的指针;II输入要增加的学生编号,从头指针指向的结构体依次向后,直到找到学生编号为输入值的那个结构体;III将其删除,其前一个的结构体指针指向其后一个结构体5、学生选课管理(voidelective())①学生选课(voidelect())I分别定义指向课程和学生结构体变量的指针;II输入要选课的学生的编号,从头指针指向的结构体依次向后,直到找到学生编号为输入值的那个结构体,如不存在则显示要录入学生信息;III输入要选课程的编号,从头指针指向的结构体依次向后,直到找到课程编号为输入值的那个结构体;IV在学生结构体对应的所选课程编号中更改信息,所选学分中加上相应分值,课程结构体所选人数中相应加一②学生退课(voidback())I分别定义指向课程和学生结构体变量的指针;II输入要退课的学生的编号,从头指针指向的结构体依次向后,直到找到学生编号为输入值的那个结构体,如不存在则显示要录入学生信息;III输入要退课程的编号,从头指针指向的结构体依次向后,直到找到课程编号为输入值的那个结构体;IV在学生结构体对应的所选课程编号中更改信息,所选学分中减去相应分值,课程结构体所选人数中相应减一6、信息浏览和保存(voidinto())①课程信息浏览(voidlistc())I定义指向结构体变量的指针;II从头指针指向的结构体依次向后,将课程结构体各成员的信息一次输出,直到最后一个结构体指针的值为NULL②学生信息浏览(voidlists())I定义指向结构体变量的指针;II从头指针指向的结构体依次向后,将学生结构体各成员的信息一次输出,直到最后一个结构体指针的值为NULL③课程信息保存(voidintoc())I定义指向课程结构体变量的指针和指向文件的指针;II输入保存路径,如果没有保存则有显示;III将课程信息写入文件中;IV将课程信息进行保存,关闭文件④学生信息保存(voidintos())I定义指向学生结构体变量的指针和指向文件的指针;II输入保存路径,如果没有保存则有显示;III将学生信息写入文件中;IV将学生信息进行保存,关闭文件7、学生信息查询(voidstore())①按学生姓名查询(voidsearch2())I定义指向结构体变量的指针;II输入要查询的学生的姓名,从头指针指向的结构体依次向后,直到找到学生姓名为输入值的那个结构体;III将该学生结构体成员的各信息依次输出②按学生编号查询(voidsearch1())I定义指向结构体变量的指针;II输入要查询的学生的编号,从头指针指向的结构体依次向后,直到找到学生编号为输入值的那个结构体;III将该学生结构体成员的各信息依次输出3调试分析3.1错误显示及分析a.编译时出现错误,回看程序发现漏掉符号等细节错误。b.运行时,界面格式与最初的设想不一致,通过重新编排,符号的增减及一进,最终达到理想界面。c.运行时,输入一个信息后,第二次输入数据时很难将输入光标移到想要的位子,通过按键的摸索,最终了解了输入要领。d.对输入的信息查询时没有记录,发现文件读取错误。3.2修改完善1、开始程序执行时,各项大的功能每一次只能执行一个就自动跳出,为了使程序保持连续性和更好的实用性,使用了start,gotostart,break,sysyem(“clx”)等实现了逐渐免于更功能的循环。2、对于学生信息中已选课程的存储,一直不知如何存储。后用实型数组,并进行循环,依次读入课程的编号,将课程编号进行存储。4用户使用说明4.1适用范围适用于管理者将课程信息和学生信息录入到系统,并可以将课程信息和学生信息进行保存,日后如果有需要在对课程和学生信息进行增加可删除。同时也适用于学生在登录自己的学号后,浏览课程信息选课,进行选课和退课操作。4.2使用方法首先管理者将现有的课程信息(包括课程编号、课程名称、使用专业、课程类型、学时、学分、教师、已选人数(初始为零))和学生信息(包括学生学号、姓名、已选学时、已选课程编号)录入到系统,并将其进行文件保存,以便以后使用。若要修改(增加和删除)课程信息和学生信息,需要先从文件中录入已存信息,再输入编号对其查找并进行相关操作。学生选课需要先输入自己的学号,若没有此学号的学生信息,需先录入此人信息在进行选课和退课。在选课和退课前,可以先浏览课程信息,并记住要选课程的编号,以便选课时需要。此外还可以学号和姓名对学生信息进行查询。5测试结果55.1运行结果主界面录入课程信息课程信息浏览课程信息存储录入学生信息学生信息浏览学生信息存储学生选课选课后学生信息浏览选课后课程信息浏览课程信息管理学生信息管理学生信息查找退出系统7附录7.1课设小结通过这次课程设计,我对C语言有了更深刻的了解,增强了程序的编写能力,巩固了专业知识,对程序的模块化观念也又模糊逐渐变的清晰了。在程序的运行与调试过程中出现了很多错误,通过反复地复习课本上的相关知识,不停地修改与调试,我终于完成了这段程序。在调试过程中,我认识到了C语言的灵活性与严谨性,同一个功能可以由不同的语句来实现,但编写程序时要特别注意细节方面的问题,因为一个小小的疏忽就能导致整个程序不能运行。当然我也认识到了自己的薄弱之处,如对链表相关知识的欠缺,文件运用的不熟练,在以后的学习中我要集中精力、端正态度,争取把知识学得更扎实、更全面。7.2存在不足1、系统不够强大,有点脆弱。2、当输入信息(课程信息,学生信息)后,不能自动保存,需手动保存。对于以上不足,以后将进行改进,以确保达到更好。7.2详细代码#includestdio.h#includestdlib.h#includestring.hintN1,N2;structstudent{intnum2;charname2[20];intnelenum[50];//所选课程编号intnelen;//所选课程学分和structstudent*next;};structcourse{intnum1;//课程编号charname1[20];charmajor[20];chartype[20];intcredit;intperiod;charteacher[20];intpeople;//选此门课程的人数structcourse*next;//结构体指针};structcourse*head1;structstudent*head2;voidzhang()//从键盘录入课程信息{structcourse*p1,*p2;N1=0;p1=p2=(structcourse*)malloc(sizeof(structcourse));printf(课程编号\t课程名称\t主修\t课程性质\t学分\t课时\t教师\n);scanf(%d%s%s%s%d%d%s,&p1-num1,p1-name1,p1-major,p1-type,&p1-credit,&p1-period,p1-teacher);p1-people=0;head1=NULL;while(p1-num1!=0){N1=N1+1;if(N1==1)head1=p1;elsep2-next=p1;p2=p1;p1=(structcourse*)

1 / 35
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功