




已阅读5页,还剩86页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
华中科技大学计算机科学与技术学院C语言程序设计课程设计实验报告题目: 招生查询系统 专业: 班级: 学号: 姓名: 成绩: 指导教师: 完成日期: 2011年 10月22 日一、 系统功能模块结构及其功能招生查询系统的功能模块本系统优点多余缺点。这一系统设置里键盘操作、鼠标操作,采用的是三项十字交叉练法。这个系统也提供了数据备份、数据恢复。每一项都提供一组数据是废的。缺点就是查询还不是很完善。这个很重要的。1、 主菜单模块 招生查询系统主界面 主菜单界面模块主要给用户提供这个系统的主要功能,供用户选择。2、 数据输入、数据保存和数据加载、数据备份和恢复数据输入采用三向十字交叉链表形式,先创建高校信息主链,然后采用先进后出方式创建相应高校的专业信息链和专业的招生信息链;这个链表需要把最后一个高校的指针传给头指针,专业的指针链也有头指针为高校链指向的专业链(p-mnext),这样就能保证专业信息和招生信息跟相应高校信息在一起了。数据保存是通过遍历十字交叉链表,把高校信息、专业信息、招生信息分别写到三个不同的文件;以达到长期保存的效果。数据加载是把三类数据从三个文件中分别读到链表中,供功能函数使用。其中数据输入在系统模块中没有设置运行之,数据的输入是事先完成之后注释掉,所以在界面中没有设置数据加载功能。而每次运行时必须先加载数据,保存数据是在修改了数据后,又想把修改后的数据保存起来就使用这个功能。系统也包含数据备份和恢复功能,防止误操作时丢失原始数据。3、 数据维护数据维护分别针对高校信息、专业信息、招生信息三类信息进行维护。有插入、删除、修改功能。插入一个高校的信息、插入某高校的专业信息、插入某高校的某专业的招生信息;删除一个高校的信息、删除某高校的专业信息、删除某高校的某专业的招生信息;修改一个高校的任一项信息、修改某高校的专业的各个方面的信息、修改某高校的某专业的招生信息,修改细致到每一个小数据。这是通过switch语句来实现的,同时提供了错误操作处理功能,完善系统的能力。4、 数据查询数据查询功能针对高校信息、专业信息、招生信息这三方面分别提供了查找全部高校信息,某高校信息;全部专业信息,某专业信息;所有高校所有专业招生、一个高校所有专业招生、所有高校某个专业招生、某个高校某专业招生。本功能主要是让用户能根据自己的所需查询相应信息,而不用去一个个找。5、 数据统计这个模块我只提供了高校历年计划招生总人数和高校历年实际招生总人数的统计。这可以直观对比,有利于作出判断、作出决策。二、 数据结构设计如下:招生信息链结点结构: typedef struct enrol_node /*招生信息结构*/ int univ_id; /*高校编号*/ int maj_id; /*专业编号*/ int year; /*招生年份*/ int plan; /*计划人数*/ int fact; /*实际人数*/ int top_score; /*最高分*/ int low_score; /*最低分*/ struct enrol_node *next; /*指向下一个节点的自引用指针*/Enrol_node;专业信息链结点结构:typedef struct maj_node /*专业信息结构*/ int univ_id; /*高校编码*/ int maj_id; /*专业编号*/ char name20; /*专业名称*/ long int sum; /*学费*/ struct enrol_node *enext; /*指向招生信息链的头指针*/ struct maj_node *next; /*指向下一个节点的自引用指针*/ Maj_node; 高校信息链结点结构:typedef struct univ_node /*高校信息结构*/ int univ_id; /*高校编号*/ char name20; /*高校名称*/ char type10; /*高校类别*/ int number; /*高校排名*/ char addr20; /*高校地址*/ char postcode10; /*高校邮编*/ char website20; /*高校网址*/ char tel20; /*联系电话*/ struct maj_node *mnext; /*指向专业信息链的头指针*/ struct univ_node *next; /*指向下一个节点的自引用指针*/ Univ_node;1、 高校信息表UnivInfo数据项名称数据项标志数据类型数据长度取值范围示例高校UnivString20“华中科技大学”编号(代码)Univ-CodeString2“01-99”“01”类别Type Char1“1-6”“2”排名NumberString2“1-99”“6”地址AddrString20“湖北省”邮编PostcodeString20“430074”网址WebsiteString20“”联系方式TelString202、 专业信息表MajInfo数据项名称数据项标志数据类型数据长度取值范围示例高校代码Univ-CodeString2“01-99”“01”专业MajString20“计算机”编号(代码)Maj-CodeString2“01-99”“01”3、 招生信息表EnrolInfo数据项名称数据项标志数据类型数据长度取值范围示例高校编号Univ-CodeString2“01-99”“01”专业编号Univ-CodeString2“01-99”“01”年份YearString4“2010”计划PlanString 4“1-1000”“500”实际Fact String4“1-1000”“450”最高分Top ScoreString3“0-750”“660”最低分Low ScoreString3“0-750”“600”链表结构:gp_head 专业11 专业12 专业1m 高校1 高校2高校n 招生111 招生11p 三、 程序结构(画流程图)一) 文件模块中:开始1) 数据输入以先进后出方式创建高校信息节点是否继续创建高校信息结点YesN把高校信息链指针传给头指针,建立先进后出指针链创建某高校专业信息链?2NY创建专业信息链NY继续创建?11创建下一个高校专业信息?Y2N创建某高校某专业的招生信息链N继续?Y创建下一个招生信息结点结束2) 数据保存开始打开高校、专业、招生信息文件P=NULL关闭三个文件N结束在文件1写入一条高校信息记录P=p-nextPmj=NULLYNPmj=pmj-next在文件2中写入一条专业信息记录YPerl=NULLN在文件3中写入一条招生信息记录perl=perl-next3) 数据加载开始N打开三类数据文件都成功?YP!=NULL遍历主信息链,输入高校信息P!=NULL Pmj!=NULL遍历指针,输入所有专业信息P!=NULL Pmj!=NULL Perl!=NULL遍历指针,输入所有高校所有专业招生信息结束4) 数据备份开始系统自动配置备份文件遍历十字交叉链表,把三类信息写到备份文件中释放指针,结束程序结束5) 数据恢复开始打开备份文件,遍历十字交叉链表把数据恢复到链表中结束二) 数据维护模块中:1) 高校三项维护功能的选择:开始1 for insert,2 for delete,3 for modify3:修改高校信息2:删除一条信息链1:输入一条高校信息链保存信息结束插入高校信息:开始在哪个高校后面插入另一高校信息?获得高校名称,遍历链表,判断找到位置创建高校结构体,插入相应位置回显插入信息结束删除高校信息开始删除哪个高校信息?得到高校名称,遍历链表找到相应节点进行相应删除操作结束修改开始修改哪个高校信息?得到高校名称,遍历链表找到相应节点选择要修改的信息点进行相应修改操作结束2) 专业三项维护功能的选择:开始1 for insert,2 for delete,3 for modify3:修改某个专业信息2:删除某条信息链1:输入一条专业信息链保存信息结束插入:开始在哪个高校哪个专业后面插入另一专业信息?获得高校和专业名称,遍历链表,判断找到位置创建专业结构体,插入于相应位置释放指针结束删除开始删除哪个高校的哪个专业信息?得到高校和专业名称,遍历链表找到相应节点进行相应删除操作结束修改开始修改哪个高校哪个专业信息?得到高校专业名称,遍历链表找到相应节点选择要修改的信息点进行相应修改操作结束3) 招生三项维护功能的选择:开始1 for insert,2 for delete,3 for modify3:修改某个招生信息2:删除某条招生信息链1:输入一条招生信息链保存信息结束插入:开始在哪个高校哪个专业的哪个招生信息后面插入另一招生信息?获得高校和专业名称、招生年份,遍历链表,判断找到相应位置创建招生结构体,插入于相应位置释放指针结束删除开始删除哪个高校的哪个专业的哪条招生信息?得到高校和专业名称和招生年月,遍历链表找到相应节点进行相应删除操作结束修改开始修改哪个高校哪个专业哪年招生信息?得到高校专业名称和招生年份,遍历链表找到相应节点选择要修改的信息点进行相应修改操作结束三) 数据查询1) 高校 选择函数:开始查询全部?还是某高校全部单个traverse_cross_list100(gp_head);find_university();清屏结束全部:开始遍历主链,输出所有高校信息结束某个:开始遍历主链,找到相应节点输出该高校信息结束2) 专业: 选择函数:开始查询全部?还是某专业全部单个traverse_cross_list010(gp_head);find_major();清屏结束全部:开始遍历主链,遍历专业连,输出所有高校所有专业的信息结束某个:开始遍历主链和专业链,找到相应节点输出该节点招生信息结束3) 招生选择函数:开始分别针对以下四项函数根据条件进行选择。根据需要进行选择,进入相应模块功能的执行结束所有高校所有专业:开始遍历十字交叉链表输出所有专业的情况结束所有高校某专业:开始遍历十字交叉链表同时找到相应专业的情况,输出。结束某高校所有专业开始遍历十字交叉链表找到相应的高校输出专业信息遍历相应高校的专业信息链结束某高校某专业开始遍历十字交叉链表找到相应的高校遍历相应高校的专业信息链,找到相应专业输出专业信息结束四) 数据统计1) 计划招生数开始统计哪个高校?请输入高校名! 获取高校名获取需要统计的年份遍历十字交叉链表,把各专业那年计划招生人数累加输出计划招生数结束2) 实际招生数 开始统计哪个高校?请输入高校名! 获取高校名获取需要统计的年份遍历十字交叉链表,把各专业那年实际招生人数累加输出实际招生数结束四、 试验结果(包括输入数据和输出结果)输入数据:高校信息:专业信息:数据维护高校:1、 插入插入前查询:插入后查询:修改高校信息:修改招生信息:3.删除功能删除前:删除后:查询查询单个学校:查询全部高校:查询某一具体专业:查询所有专业:查询某一学校某一专业的招生情况:查询某高校所有专业招生情况:高校计划招生数统计:查询所有高校某专业招生情况:五、 体会1、 在创建链表时,运行过程中出现一闪而过的现象,经过不断的尝试发现了用getchar是一次读一个字母,所以选择时应输入y或n,而不是yes或no否则会影响后面的运行(留在缓冲区的字符导致)2、 在使用getchar函数时,不能输入空格,否则输入数据时就不能保证信息的匹配。3、 要给指针配备内存单元,要不就会随意分配单元,那这样就会造成严重后果。六、 参考文献C语言程序设计. 曹计昌,卢萍,李开编著. 科学出版社;C语言实验与课程设计. 曹计昌,卢萍,李开编著. 科学出版社。附录:原程序清单#include #include #include #include #include #include #include #include #include #include #include #ifndef TYPE_H_INCLUDED#define TYPE_H_INCLUDED#define SCR_ROW 25 /*屏幕行数*/#define SCR_COL 80 /*屏幕列数*/* *招生信息链结点结构 */ DWORD wr;typedef struct enrol_node /*招生信息结构*/ int univ_id; /*高校编号*/ int maj_id; /*专业编号*/ int year; /*招生年份*/ int plan; /*计划人数*/ int fact; /*实际人数*/ int top_score; /*最高分*/ int low_score; /*最低分*/ struct enrol_node *next; /*指向下一个节点的自引用指针*/Enrol_node;/* 专业信息链结点结构 */typedef struct maj_node /*专业信息结构*/ int univ_id; /*高校编码*/ int maj_id; /*专业编号*/ char name20; /*专业名称*/ long int sum; /*学费*/ struct enrol_node *enext; /*指向招生信息链的头指针*/ struct maj_node *next; /*指向下一个节点的自引用指针*/ Maj_node;/* *高校信息链结点结构 */typedef struct univ_node /*高校信息结构*/ int univ_id; /*高校编号*/ char name20; /*高校名称*/ char type10; /*高校类别*/ int number; /*高校排名*/ char addr20; /*高校地址*/ char postcode10; /*高校邮编*/ char website40; /*高校网址*/ char tel20; /*联系电话*/ struct maj_node *mnext; /*指向专业信息链的头指针*/ struct univ_node *next; /*指向下一个节点的自引用指针*/ Univ_node;/* *高校计划招生数统计信息链结点结构 */typedef struct plan_node int univ_id; /*高校编号*/ int year; /*招生年份*/ int plan; /*计划人数*/ struct plan_node *next; /* 指向下一结点的指针*/ Plan_node;/* *高校实际招生数统计信息链结点结构 */typedef struct fact_node int univ_id; /*高校编号*/ int year; /*招生年份*/ int fact; /*计划人数*/ struct fact_node *next; /* 指向下一结点的指针*/ Fact_node;/* *屏幕窗口信息链结点结点结构 */typedef struct layer_node char LayerNo; /* 弹出窗口层数*/ SMALL_RECT rcArea; /* 弹出窗口区域坐标*/ CHAR_INFO *pContent; /* 弹出窗口区域字符单元原信息存储缓冲区*/ char *pScrAtt; /* 弹出窗口区域字符单元原属性值存储缓冲区*/ struct layer_node *next; /* 指向下一结点的指针*/ LAYER_NODE;/* *标签束结构 */typedef struct labe1_bundle char *ppLabel; /* 标签字符串数组首地址*/ COORD *pLoc; /* 标签定位数组首地址*/ int num; /* 标签个数*/ LABEL_BUNDLE;/* *热区结构 */typedef struct hot_area SMALL_RECT *pArea; /* 热区定位数组首地址*/ char *pSort; /* 热区类别(按键、文本框、选项框)数组首地址*/ char *pTag; /* 热区序号数组首地址*/ int num; /* 热区个数*/ HOT_AREA;LAYER_NODE *gp_top_layer = NULL; /*弹出窗口信息链链头*/Univ_node *gp_head = NULL; /*主链头指针*/char *gp_sys_name = 高校招生查询系统; /*系统名称*/char *gp_univ_info_filename = univ.dat; /*高校基本信息数据文件*/char *gp_major_info_filename = major.dat; /*专业信息数据文件*/char *gp_enrol_info_filename = gp_enrol.dat; /*招生信息数据文件*/char *ga_main_menu = 文件(F), /*系统主菜单名*/ 数据维护(M), 数据查询(Q), 数据统计(S), 帮助(H) ;char *ga_sub_menu = I数据加载, /*系统子菜单名*/ S 数据保存, B 数据备份, R 数据恢复, X 退出 Alt+X, U 高校信息, M 专业信息, D 招生信息, U 高校信息, M 专业信息, D 招生信息, P高校计划招生数, F高校实际招生数, T 帮助主题, , A 关于. ;int ga_sub_menu_count = 5,3,3,2,3; /*各主菜单项下子菜单的个数*/int gi_sel_menu = 1; /*被选中的主菜单项号,初始为1*/int gi_sel_sub_menu = 0; /*被选中的子菜单项号,初始为0,表示未选中*/CHAR_INFO *gp_buff_menubar_info = NULL; /*存放菜单条屏幕区字符信息的缓冲区*/CHAR_INFO *gp_buff_stateBar_info = NULL; /*存放状态条屏幕区字符信息的缓冲区*/char *gp_scr_att = NULL; /*存放屏幕上字符单元属性值的缓冲区*/char gc_sys_state = 0; /*用来保存系统状态的字符*/HANDLE gh_std_out; /*标准输出设备句柄*/HANDLE gh_std_in; /*标准输入设备句柄*/void creat_cross_list(Univ_node *head); /*创建十字交叉链表的函数*/void save_cross_list(Univ_node *head); /*保存十字交叉链表的函数*/void load_cross_list(Univ_node *head); /*读入十字交叉链表函数*/void InitInterface(void); /*系统界面初始化*/void ClearScreen(void); /*清屏*/void ShowMenu(void); /*显示菜单栏*/void PopMenu(int num); /*显示下拉菜单*/void PopPrompt(int num); /*显示弹出窗口*/void PopUp(SMALL_RECT *, WORD, LABEL_BUNDLE *, HOT_AREA *); /*弹出窗口屏幕信息维护*/void PopOff(void); /*关闭顶层弹出窗口*/void DrawBox(SMALL_RECT *parea); /*绘制边框*/void LocSubMenu(int num, SMALL_RECT *parea); /*主菜单下拉菜单定位*/void ShowState(void); /*显示状态栏*/void TagMainMenu(int num); /*标记被选中的主菜单项*/void TagSubMenu(int num); /*标记被选中的子菜单项*/int DealConInput(HOT_AREA *phot_area, int *pihot_num); /*控制台输入处理*/void SetHotPoint(HOT_AREA *phot_area, int hot_num); /*设置热区*/void RunSys(Univ_node *pphd); /*系统功能模块的选择和运行*/BOOL ExeFunction(int main_menu_num, int sub_menu_num); /*功能模块的调用*/void CloseSys(Univ_node *phd); /*退出系统*/BOOL LoadData(void); /*数据加载*/BOOL SaveData(void); /*保存数据*/BOOL BackupData(Univ_node *hp,char*filename); /*备份数据*/BOOL RestoreData(Univ_node *head,char*filename); /*恢复数据*/BOOL ExitSys(void); /*退出系统*/BOOL HelpTopic(void); /*帮助主体*/BOOL AboutDorm(void); /*关于系统*/BOOL MaintainUnivInfo(void); /*维护高校基本信息*/BOOL MaintainMajInfo(void); /*维护专业基本信息*/BOOL MaintainEnrolInfo(void); /*维护招生基本信息*/BOOL QueryUnivInfo(void); /*查询高校基本信息*/BOOL QueryMajInfo(void); /*查询专业基本信息*/BOOL QueryEnrolInfo(void); /*查询招生基本信息*/BOOL StatPlan(void); /*高校计划招生数*/BOOL StatFact(void); /*高校实际招生数*/BOOL example_of_input(void);void ClearWorkArea(void);void input_cross_list( Univ_node *head); /*创建十字交叉链表的函数*/void save_cross_list(Univ_node *head) ;void insert_university(void);/*在编号为a的高校后面插入信息*/void delete_university(void);/*删除编号为a的高校信息*/void insert_major(void);/*在编号为a的高校的编号为b的专业后面插入信息*/void modify_university(void) ; /*修改高校信息*/void delete_major(void);/*删除编号为a的高校信息*/void insert_enrolling(void);/*在编号为a的高校的编号为b的专业后面插入招生年份为c的招生信息*/void delete_enrolling(void);/*删除编号为a的高校的编号为b的招生年份为c的招生信息*/void modify_enrolling(void ); /*修改某校某专业某年招生信息*/void traverse_cross_list100( Univ_node *head); /*遍历十字交叉链表的函数,只输出学校信息表*/void find_university(); /*查找某个学校信息*/void traverse_cross_list010( Univ_node *head); /*遍历十字交叉链表的函数,只输出专业信息表*/void find_major(void); /*查找某个专业信息*/void traverse_cross_list001( Univ_node *head); /*遍历十字交叉链表的函数,只输出招生信息*/void find_osam_enrolling(Univ_node *head);/*查找某个学校所有专业的招生信息*/void find_asom_enrolling(Univ_node *head);/*查找所有学校某个专业的信息*/void find_enrolling(void); /*查找某个学校某个专业某年招生信息*/int calculate_plan(void); /*统计某年某校计划招生数*/int calculate_fact(void); /*统计某年某校实际招生数*/*以下函数保留,不提供具体内容*/BOOL InsertEdrolNode(Univ_node *phd, Enrol_node *penrol_node);/*插入缴费信息结点*/BOOL DelEdrolNode(Univ_node *phd, char *maj_id, char *date);/*删除缴费信息结点*/BOOL ModifEdrolNode(Univ_node *phd, char *maj_id, char *date, Enrol_node *penrol_node);/*修改缴费信息结点*/Maj_node *SeekMajnode(Univ_node *phd, char *maj_id); /*查找学生基本信息结点*/Enrol_node *SeekEnrolnode(Univ_node *phd, char *maj_id, char *date);/*查找缴费信息结点*/BOOL SaveSysData(Univ_node *phd); /*保存系统数据*/BOOL BackupSysData(Univ_node *phd, char *filename); /*备份系统数据*/BOOL RestoreSysData(Univ_node *pphd, char *filename); /*恢复系统数据*/#endif /* TYPE_H_INCLUDED*/main.c#includeenrol.hint main() COORD size = SCR_COL, SCR_ROW; /*窗口缓冲区大小*/ gh_std_out = GetStdHandle(STD_OUTPUT_HANDLE); /* 获取标准输出设备句柄*/ gh_std_in = GetStdHandle(STD_INPUT_HANDLE); /* 获取标准输入设备句柄*/ SetConsoleTitle(gp_sys_name); /*设置窗口标题*/ SetConsoleScreenBufferSize(gh_std_out, size); /*设置窗口缓冲区大小80*25*/ /creat_cross_list(&gp_head); /*创建链表*/ /save_cross_list(gp_head) ; /*保存数据*/ /load_cross_list(&gp_head); /*加载数据*/ InitInterface(); /*界面初始化*/ RunSys(&gp_head); /*系统功能模块的选择及运行*/ CloseSys(gp_head); /*退出系统*/ getchar(); return 0; void creat_cross_list(Univ_node *head) /*创建十字交叉链表的函数,输入数据*/ Univ_node *hp=NULL,*p; /*hp就是起指针转移的作用*/ Maj_node *hpmj=NULL,*pmj; Enrol_node *perl=NULL,*pperl; char ch;loop: p=(Univ_node *)malloc(sizeof(Univ_node);/*创建高校信息的第一个节点*/ memset(p, 0, sizeof(Univ_node); printf(input university id,name,type,number,adrress,postcode,website,phonen); scanf(%d%s%s%d%s%s%s%s,&p- univ_id,p-name,p-type,&p-number,p-addr,p-postcode,p-website,p-tel); getchar(); p-mnext=NULL; p-next=hp; hp=p; printf(continue to input data of universities?Y or Nn); ch=getchar(); getchar(); if(ch=y|ch=Y) goto loop; if(ch=N|ch=n) printf(完成所有高校信息的输入!); getchar(); gp_head=hp; p=gp_head; while(p!=NULL) /*创建每个学校的专业信息链*/ p-mnext=hpmj; printf(input the major information of %d university?Y or N? n,p- univ_id); ch=getchar(); getchar(); while(ch=y|ch=Y) pmj=(Maj_node *)malloc(sizeof(Maj_node); memset(pmj, 0, sizeof(Maj_node); printf(input major id,major name,feen); scanf(%d%s%ld,&pmj-maj_id,pmj-name,&pmj-sum); getchar(); pmj
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 邮费协议书价
- 工程保安协议书
- 电动轮自卸车电气装配工检验仪器校准实操考核试卷及答案
- 公司轧钢成品工工艺技术规程
- 2025终止劳动合同申请书
- 2025年全权所有买卖合同
- 2025农用薄膜、化学肥料、农药购销合同范本
- 安徽省养鹿中学2026届数学九上期末质量跟踪监视试题含解析
- 债权转让合同2篇
- 专利知识培训通讯稿课件
- 《钢筋桁架楼承板应用技术规程》TCECS 1069-2022
- 渝22TS02 市政排水管道附属设施标准图集 DJBT50-159
- 从S国税局视角剖析转让定价反避税的实践与启示
- 图像几何变换讲解
- 分拣部管理制度
- 光缆通信基础知识
- 德胜洋楼公司及德胜员工手册-员工守则
- 我的家乡湖南永州宣传简介
- 认识国旗(课堂PPT)
- 小儿危重症的早期识别与处理课件
- 经史子集国学文库:子部·儒家·稽山承语
评论
0/150
提交评论