《学生选修课程系统设计》由会员分享,可在线阅读,更多相关《学生选修课程系统设计(52页珍藏版)》请在金锄头文库上搜索。
1、数据结构与 C 语言综合训练实习报告题 目: 学生选修课程系统设计学号姓名专业班级指导教师实践日期一、综合训练目的与要求综合训练是计算机科学与技术、信息管理与信息系统、软件工程专业重要的 实践性环节之一,是在学生学习完程序设计语言(C)、数据结构课程后进 行的一次全面的综合练习。本课综合训练的目的和任务:1. 巩固和加深学生对C语言、数据结构课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用 C 语言、数据结构解决实际问题的能力二、综合训练任务实习题目:学生选修课程系统设计。题目需求:运用结构体
2、和链表设计一个简单的选修课程管理系统,做出系统 菜单,并作出管理员菜单和学生菜单两个子菜单,使之能完成管理员的对课程信息 的录入、浏览、查询、添加、删除、修改与学生对选修课程的浏览、查询、选择, 浏览学生已选的选修课程和删除选错的课程。三、总体设计方案设计:图 1 总体流程图设计思路:1、此程序是要写一个选修课管理系统,首先要先设计一个主菜 单,在由主菜单进入进行函数调用,进行下面的操作。由于有管理员与学生两类人 登陆系统,进行不同的操作,所以设计两个子菜单,以便区分管理2、由管理员先录入信息,然后管理员和学生再对录入的信息进行操作,所以 必须对每个程序修改的数据进行保存,采用文件的形式,数据
3、均保存在文件内,可 以通过文件指针对文件进行读写与保存。3、用一个结构体表示一条课程信息,每个模块的具体操作时在链表里,每次 操作时先将信息从文件读出存在链表,进行操作,然后再将信息写入文件。1、模块说明A. 录入课程:Input ()流程图如下:输入课程号、课程名称、:幵课学院、总学时、图 2 录入信息流程图详细说明:此模块可以使管理员通过对文件的读写完成对全部选修课程的基 本信息(包括课程号,课程名称,开课学院,总学时,总学分,开课学期)的一次 性录入,以便进行以后的操作。其中,课程号定义为整型,开课名称和开课学院定 义为20 个字节的字符型,总学时、总学分和开课学期定义为整型。此函数没有
4、返回值,将录入的选修课程信息存入一个文件内。B、浏览课程prin(),prin2()显r课7JpL1程1_i录返信回息的 所管模 块理有 课员 菜 单程信 息图 3 浏览课程流程图 详细说明:使管理员和学生能浏览到管理员已录入的所有选课信息,此模块用到了文件操作的读出功能。此函数也没返回值,若操作完成,能返回上一级菜 单;C、查询课程search(),search1()流程图如下:图 4 查询课程流程图详细说明:此模块有两种查询方式,第一是按课程名查找,第二是按学分查 找,它是通过循环进行推移查找的,若找到,这显示该选修课程的全部信息,否 者,则显示未找到,以便给以提示。此模块可以实现对课程信
5、息的查询,只要中输 入课程号或某课程的学分,就可以查询到该课程的相关信息。先输入 1 或 2 选择查 找方式,然后再输入字符型的课程名或整型的学分即可查找。 管理员和学生均能 通过此程序查询, 本程序用到文件的读出功能。操作完成,返回到上一级菜单。D、添加课程Insert()流程图如下:图 5 添加课程流程图详细说明:将一个课程的所有信息都录入,程序会先打开相应文件,运用文 件文件写追加的方式打开,再将新增的课程信息写入文件并保存。此函数没返回 值,输入的课程号、总学时、总学分、开课学期都是整型,课程名和开课学院是字 符型。操作完成后,回到上一级菜单。E、删除课程del() del1()流程图
6、如下:图 6 删除课程流程图详细说明:此程序是完成管理员对课程信息的删除和学生对自己错选的课程 信息的删除的操作。只要输入要删除的课程号,系统便利用循环推移查找到要删除 的课程号,将此条课程信息删除。并将剩余的课程信息通过文件信息保存在文件 内,此程序仅需输入一个整型的课程号,没有返回值。运用到了文件的读写功能。 操作完成后,回到上一级菜单。F、修改课程modify()流程图如下:图 7 修改课程流程图详细说明:此程序完成的是管理员对选修课程的修改,若某一个课程的总学 时、总学分或开课学院出现错误,可以通过此程序修改。此程序没有返回值。输入 一个整型的课程号,程序就会查找到该条课程信息,再输入
7、一个整型序号,选择要 修改的项目,再输入实际的整型数据,便可完成对信息的修改。修改之后,将显示 新的课程信息,并将新的课程信息通过文件指针写入文件内保存。操作完成后,返 回管理员菜单。G、选择课程choose()流程图如下:返是输入选回要选择学择的课课:程程菜否号单选课继续是否显示所选 的课程信 息,并保 存到一个 新的文件J图 8 选择课程流程图详细说明:此程序执行的是使学生选择自己所需要的选修课程。没有返回 值。输入一个整型的课程号,程序通过循环查找到该课程号,并将该课程号对应的 课程信息通过文件指针写入另一个文件内保存,并将信息显示出来。操作完成后, 返回学生菜单。H、浏览所选信息pri
8、n()l 流程图如下:图 9 浏览选课信息流程图详细说明:此程序是通过文件指针打开文件已有的学生选课信息文件,将文 件内的信息写入链表,然后显示出来。此程序没返回值。操作完成后,返回到上一 级菜单五、调试与测试1、初始界面::卩使用 j先 ffei果 系宝充 K K K K K K K 賈賈賈賈 XXi.aw理员身份登录2 -以学生身份登录3.退出er:图 10 初始界面2,选择 1,输入并输入密码,进入管理员的界面如下:图 11 管理员菜单3选择 1 根据提示录入课程信息,再返回管理员菜单。 再选择 2,进入浏 览,图示如下:图 12 浏览信息界面4,从管理员菜单选择 3,进入查询:图 13
9、 查询界面例如按照学分查找:输入 2图 14 查询界面5,添加课程与录入课程相似请输入选修课程信息:num:13nan酣微生物学 inst itute :生命学院stime:30score : 4term:10是否继续输入数据y/n 图 15 添加界面6,删除课程;输入想要删除的课程号码,3,即可完成删除操作课程号1蠶名称一开课圭院一 理学傥总学时一60总学分6开课学期!1 !2英语外语系5042 :3数据结构信息工程学院5011 !晴输入想要删除的课程号:图 16 删除课程7,修改课程,:譬号鬟名称!2 英语3IF外语系总学时 总学分开课学期:60 6 1 !曬翳程课程万2央语总学时 总学分
10、开课学期!5052!选择修改的信息1.总嘗时覆总率分23-开课学: 实际的总学分为赳.图 17 修改课程输入想要修好的课程号码 2,再输入要修改的类型,再输入要修改的数值即 可。8,从学生身份登录以后,可以选择浏览全部,或者按照学分和选修课程编号来进行查询图 18 学生的查询课程9,从学生身份登录以后,图 19 选择课程界面先输入要选择的课程号,然后会弹出是否确定所选的课程,确定就输入0否则则继续进入选择课程界面;10.在选择自己的课程以后可以输入 4,进行查询自己已经选择的课程图 20 浏览已选课程11,删除误选的课程,然后再输入误选编号,即可!课程号堤程名称!2共语膨院总学时总学分开课学期
11、!5042!醫输入想要删除的错选的课程号:图 21 删除误选课程八、附录:核心代码清单/ 123.cpp : Defines the entry point for the console application. /#include stdafx.h#include stdio.h#includestring.h#includemalloc.h#includestdlib.h#include conio.hvoid menu();void Students();void Mangers();struct Subjectsint num;char name20;char institute20
12、;int stime;int score;int term;struct Subjects *next;void input()/录入学生信息system(cls);Subjects *p;Subjects *l=NULL;FILE *fp;int x;if(fp=fopen(Subjects.txt,w)=NULL)printf(cant open filen);return;dop=(Subjects*)malloc(sizeof(Subjects);printf(n 请输入课程号:);scanf(%d,&x);p-num=x;flushall();printf(n 请输入课程名:);sc
13、anf(%s,p-name);flushall();printf(n 请输入开课学院:);scanf(%s,p-institute);flushall();printf(n 请输入总学时:);scanf(%d, &x);p-stime=x;flushall();printf(n 请输入总学分:); scanf(%d,&x);p-score=x;flushall();printf(n 请输入开课学期:); scanf(%d,&x);p-term=x;flushall();p-next=NULL;l=p;fprintf(fp, %d,p-num);fprintf(fp, %s ,p-name); fprintf(fp,%s ,p-institute); fprintf(fp,%d ,p-stime); fprintf(fp,%d ,p-score); fprintf(fp,%d,p-term);printf(是否继续添加,y/n bb);while(getchar()=y);fclose(fp);prin tf(“ *操作完成,按任意键回到上一级菜单 *n);getchar();Mangers();Subjects *foutput()/把文件信息写入链表FIL