第一篇:C语言程序设计考试系统
《C语言程序设计》考试系统
C language progamme design examination system
马国富
刘波
(安阳工学院 计算机工程系,河南 安阳455000)
Ma GuoFu,liu bo
(Department of Computer Engineering,Anyang Institute of Technology,Anyang 455000)
一:摘要
这一考试系统是一种计算机辅助教学软件,它包括教学模式,练习模式,考试模式。采用调用数据库的方式打开,可以实现随机选题和指定选题,而不是固定的试题。解决了由于教材更新和题库更新导致教学软件过时。大大提高了软件的利用价值,打破了教学软件内容的固化,其次三种工作模式极大地拓宽了软件的使用范围,不再是单一的教师教学软件或学生考试软件。可根据教学需要灵活地选择不同模式,同时少作修改即可用于其它课程。
系统解决了在多媒体教学中出现的模式僵化,内容固化的问题。更新教学内容只需建立一个新的数据源实现连接即可。
Abstract
The test system of the principle is a Computer extended education software, and this course is also the compulsory course in High etc.school.This system include Teaching mode.Practice mode Examination mode.You can use database open the examination database That is to say the content is up to you or at random.It is the revolution of test system This is the main reason we develop it.二:关键词
考试系统、多媒体技术、数据源、连接数据库
keyword examination system、multimedia technology、data soure、connection of database 三:课题研究的意义和目的
安阳工学院计科系毕业论文 2 3.1研究意义
现在,多媒体技术日趋成熟,多媒体系统以其能输出精彩的图形和图像、美妙的声音、动感的画面赢得了用户和社会各界广泛的关注和应用。如果把按传统考试方式同现代化的多媒体技术相结合,并且用多媒体著作工具及其它多媒体技术,编制一套符合高校考试需求的系统及其配套的多媒体教学软件,利用多媒体技术生动、直观、形象展示信息的特点,辅助教师授课和学生进行考试,尤其对部分有限制性的实验环节,可利用活动视频技术进行展示,这将会解决一系列目前存在的问题。总之,该课题是在计算机辅助教学及考试上进行的一次积极有意义的尝试,为其他实践性较强的课程进行多媒体辅助教学开辟一条新的路子,具有一定的理论和现实意义。
3.2目 的
传统的考试手段主要依靠有纸试卷,几乎没有可重用性。本课题将实现:用计算机辅助考试系统,把多媒体生动、直观的显示出来,使学生不再将考试视为一种枯燥无味的东西,提高了考试效果,使学生在一种愉悦的心情中进行考试,把枯燥的重复变为充满乐趣、具有启发性的考试过程,使学生能比较全面的学习知识,掌握技能,达到素质教育的要求。
四:系统流程图设计
4.1 初始化流程设计
在使用Authorware创建任何多媒体项目的时候,都应该先设置当前项目文件的窗口大小,将其设置为“800×600”,然后选择“演示居中屏幕”,同时取消对“显示标题栏”和“显示菜单栏”复选框的选择。
4.2 主界面的设计
本界面采用了Photoshop7.0图形图像处理软件来绘制。为了避免界面的单调和呆板,用蒙版和滤镜技术加以美化。该界面把Photoshop中的图层技术、图层蒙版技术、文字效果及滤镜等功能完美的结合了起来。并且在底部设置了一个Flash动画,增加视觉效果。
4.3背景音乐的交互控制
该多媒体教学以MIDI作为背景音乐,背景音乐的交互控制包括背景音乐的随机选曲播放、停止等功能,另外当该教学程序处于活动状态时,能够随时调整背景音乐和讲解声音的大小及比例,让使用者在一种轻松悦耳的环境中考试(调出WINDOWS的音量控制实现),还能够暂停背景音乐,当再次进入活动状态时则能重新播放背景音乐。
为了充分考虑用户计算机的不同配置情况,首先利用BUDAPI.U32的BASOUNDCARD函数判断用户机器是否已经安装了声卡,如果已经安装则执行背景音乐播放,否则不允许播放任何背景音乐操作.安阳工学院计科系毕业论文 3 程序如下:
IF BASOUNDCARD()THEN MIDI:=1 TEST(MIDI,MIDILOOP(FILELOCATION^”MUSICMUSIC-”^RANDOM(1,5,1)^”.MID”),STOPMIDI())END IF 软件中的背景音乐交互控制是通过交互响应来实现的。在程序执行过程中,用户始终可以通过按钮控制背景音乐的播放与暂停。在计算图标“播放音乐”后添加一交互图标并命名为“音乐控制”,并在交互图标右边添加三个计算分支。设置“STOP/PLAY”分支为按钮响应交互,其功能是实现对背景音乐的控制。由于在整个程序执行过程中它都是有效的,因此须设置其为永久按钮,即选择“PERPETUAL”属性选项,同时设置“ACTIVE IF”条件为:BASOUNDCARD(),即检测到用户没有安装声卡的情况下该按钮及响应分支无效。
4.4内容的导航设计
该多媒体教学涉及内容繁多,不仅包括文本、图片、声音和动画,而且还有其它多媒体工具与Authorware 配合,同时,还把视频文件导入,以增加实用性。为使用户操作简单方便,设计了合理的教学内容导航。主文件与各章节之间的导航设计根据结构规划中的该章节内容的栏目划分,在流程设计中为这些栏目设计了导航,如图1为主程序内容导航的设计流程图。
图1 主程序内容导航
这样的流程设计使整个主程序结构清晰,可读性强。由于该文件结构是主-分结构,即主文件调用各章节模块文件的方式,因此在主文件的章节内容中实际存放的是一个起链接桥梁作用的调用脚
安阳工学院计科系毕业论文 4 本,而具体的考试试题题型内容则放在各章节的模块文件内。
4.5各模块的内容流程设计
图中的考试模式、练习模式、教学模式及退出系统这四部分主要程序流程图如下图
2、图
3、图
4、图5所示。
图2
安阳工学院计科系毕业论文 5
图3
图4
图5
安阳工学院计科系毕业论文 6 看每题的回答情况.最后回到选题主界面,并把学生所做的答案成绩保存到数据库中。
当用户在主界面中,选择了“考试模式”后,系统就会进入到登录界面系统会提示输入用户名和密码,当输入后,点击“确定”后,系统将会进入到题型选择界面。在提示框中输入用户名和密码,我们点击“确定”后,就会进入到正式的单选题型界面中,选择“单选题”单击。
C语言程序设计考试系统的选择题从数据库中取出选择题,在一个界面上显示。利用三个热区域交互按钮“上一题”“下一题,”“完成”,按钮和四个热区域设置计算图标用来记录学生所选择的答案。在学生选择“完成”后,弹出学生做题的情况界面,然后回到选题主界面,并把学生所做的答案成绩保存到数据库中。
5.1“未命名”用来擦除以前的图像
5.1.1 打开“未命名”的属性,进入“未命名”的属性窗口。
5.1.2在“属性窗口”中单击擦除标签在设置过渡效果进行设置 5.1.3单击“确定”按钮
5.2 设置“单选界面”插入一个图像
5.2.1双击“单选界面”图标进入显示图标窗口
5.2.2单击 绘图工具箱 图标进行绘制一个和窗口矩形一样大的矩形
5.2.3设置矩形的颜色为“绿色”
5.2.4单击显示图标窗口的关闭按钮,关闭保存对“单选界面”的设置 5.3 设置交互“进入”
5.3.1在交互图标的右边拖放一个群组“单选” 5.3.2设置单选的热区为“按钮“ 5.3.3单击确定后,双击“选择”。
5.3.3.1“未命名”用来擦除上次运行的图形 5.3.3.2在“打开数据库”的输入如下源程序:
安阳工学院计科系毕业论文 7 hint0:=“您的数据库没有连接上......”--显示连接数据库的信息 title:=“数据库连接....” ODBChandle:=ODBCOpen(WindowHandle,“",”database“,”“,”“)--得到数据源
getrecord:=”select count(sequence)from erigister“--得到记录的个数 record:=ODBCExecute(ODBChandle,getrecord)if ODBChandle=0 then--测试连接数据库是否连接成功 MessageBox(WindowHandle,hint0,title,17)end if ODBCClose(ODBChandle)ODBChandle:=ODBCOpen(WindowHandle,”“,”database“,”“,”“)if ODBChandle=0 then MessageBox(WindowHandle,hint0,title,17)end if sqlstring1:=”select ssdb from erigister where sequence=“^record^”“-从表中选择单选库表题 ssdatabase:=ODBCExecute(ODBChandle,sqlstring1)getrecord:=”select count(sequence)from “^ssdatabase^”“ record:=ODBCExecute(ODBChandle,getrecord)--ssdb数据库的记录个数,以便产生随机数 sssum:=0 number1:=1 sui:=[] sui[1]:=Random(1,record,1)--下面程序用来产生一个随机数不能出现相同的题目 i:=2 repeat while i<=record flag:=0 repeat while flag=0 sui[i]:=Random(1,record,1)flag1:=0 repeat with p:=1 to i-1 if sui[i]=sui[p] then flag1:=1 end repeat if flag1=0 then flag:=1 end repeat i:=i+1 end repeat
5.3.3.3 在“做选择的背景”显示图标中设计单选题的界面如上图5.4 5.3.3.4 在“数据库的操作”中输入如下代码:在这里,我们就要实现对数据库的随机读取和跟踪答案的长短来选择界面
x:=0 ran:=sui[number1] result:=”“ record1:=Number(record)
安阳工学院计科系毕业论文 8 record:=record1--得到记录的个数
sqlstring1:=”select topic from “^ssdatabase^” where sequence=“^ran^”“分别得到选择题各项 sqlstring2:=”select a from “^ssdatabase^” where sequence=“^ran^”“ sqlstring3:=”select b from “^ssdatabase^” where sequence=“^ran^”“ sqlstring4:=”select c from “^ssdatabase^” where sequence=“^ran^”“ sqlstring5:=”select d from “^ssdatabase^” where sequence=“^ran^”“ sqlstring6:=”select result from “^ssdatabase^” where sequence=“^ran^”“ get1:=ODBCExecute(ODBChandle,sqlstring1)--get1得到选择题目内容 get2:=ODBCExecute(ODBChandle,sqlstring2)--get2得到选择项A内容 get3:=ODBCExecute(ODBChandle,sqlstring3)--get3得到选择项B内容 get4:=ODBCExecute(ODBChandle,sqlstring4)--get4得到选择项C内容 get5:=ODBCExecute(ODBChandle,sqlstring5)--get5得到选择项D内容 get6:=ODBCExecute(ODBChandle,sqlstring6)--get6得到选择题的答案 inputa:=1--用来设置热区域的激活条件
5.3.3.5 空“操作”用来设置跳转标志
5.3.3.6
在交互图标右边拖入四个热区域
在计算图标中从左到右的四个计算图标中输入: result:=”A“ result:=”b“ result:=”c“ result:=”d"在交互属性中设置激活条件为inputa=1: ,鼠标指针设置为标准鼠标指针,其它的为默认设置.其中result变量用来记录用户所选的答案.5.3.3.7拖一个交互图标“未命名”在它的右边拖两个计算图标为“上一题”和“下一题”,再拖一个群组“完成”放在“下一题”右边,设置热区为按钮。在“上一题”的激活条件中输入number1>1,鼠标指针设置为:标准的鼠标指针。在“下一题”的激活条件中输入:number1 六 结束语 根据对教师上课时课堂练习的分析,开发出该考试系统,主要是能够方便课堂练习,同时还可用于期中期末测试,该系统主要是针对《C语言程序设计》课程来设计的。对该系统做简单修改,即可用于其它课程。 参考文献 专著:王嘉宁 朱隽著 《Photoshop7.0中文版新概念百例》[M] 中国水利水电出版社 2004年4月 专著:龚祥国主编 《Photoshop图像处理实用教程》[M] 科学出版社 2002年 2月 专著: 王龙 金海主编 《Flash MX实战入门新概念》[M] 中国水利水电出版社 2005年5月 专著: 李恒著《Authorware 6.0多媒体实例大制作》[M] 冶金工业出版社 2002 年4月 专著: 袁海东著《Authorware 7.0教程 》[M] 电子工业出版社 2004年9月 专著: 郝蕾蕾著 《Authorware课件制作》[M] 中国水利水电出版社 2001年7月 《C语言程序设计》考试大纲 Ⅰ考试性质 普通高等学校本科插班生招生考试是由专科毕业生参加的选拔性考试。高等学校根据考生的成绩,按已确定的招生计划,德、智、体全面衡量,择优录取。因此,本科插班生考试应有较高的信度、效度、必要的区分度和适当的难度。 本大纲适用于所有需要参加《C语言程序设计》考试的各专业考生。Ⅱ考试内容 总体要求:考生应按本大纲的要求了解或理解“C语言程序设计”中的数据类型、运算符与表达式、顺序结构、选择结构、循环控制、数组、函数、指针、预处理命令、结构体与共用体、文件的基本概念。熟练掌握程序设计的基本方法和C语言本身的语法、语句和使用方法。掌握一般问题的分析思路、数据存储结构表达及建立在存储结构之上的程序设计方法,具备初步运用C语言解决问题的程序设计能力;能熟练地阅读、理解和编制简单的C程序;具备进一步学习计算机各专业后续课程的能力和基础。 一、数据类型、运算符与表达式 ⒈ 考试内容 ⑴关键字与标识符的概念:关键字的含义,标识符的定义,常量和变量的分类。 ⑵数据类型:数据类型的含义、特点,不同类型常量的表达,不同类型变量的定义、赋初值方法。 ⑶运算符:各类运算符的含义、优先级,各类表达式的表示方法、运算特点、值的类型和计算方法,各类公式的表达式描述和各类表达式的混合运算。 ⒉ 考试要求 ⑴理解关键字与标识符的概念、应用特点,理解数据类型的含义和常量、变量的分类。⑵掌握各数据类型的含义、特点,不同类型常量的表达,不同类型变量的定义和赋初值方法。 ⑶熟练掌握各类运算符的含义、优先级,各类表达式的表示方法、运算特点、值的类型和计算方法。能够进行各类公式的表达式描述和各类表达式的混合运算。 二、顺序结构程序设计 ⒈ 考试内容 ⑴输入输出:常用的输入输出函数,基本的输入输出格式。⑵赋值语句:赋值语句功能和表达方法。 ⑶顺序程序设计:编写顺序结构语句及程序。 ⒉ 考试要求 ⑴了解数据输入输出的概念以及在C语言中的实现方法。 ⑵掌握赋值语句表达方法;掌握两组输入输出函数的格式、表达方式和使用功能、特点。 ⑶熟练掌握顺序程序设计的思想和编程方法,能够熟练编写简单问题的程序并上机调试。 三、选择结构程序设计 ⒈ 考试内容 ⑴条件的表达方式:算术表达式、关系表达式、逻辑表达式,各种运算结果的表达与判别。 ⑵条件语句:if语句、if~else语句、else~if结构以及switch和break语句的使用方法。⑶选择结构程序设计:编写带有选择结构的语句及程序。⒉ 考试要求 ⑴掌握问题中条件的表达方式(关系表达式、逻辑表达式)和运算结果。 ⑵熟练掌握编程中条件的描述方法(用不同格式的if语句或switch语句)和使用方法,能够进行各种条件下的问题的程序设计。 四、循环程序设计 ⒈ 考试内容 ⑴循环语句: while、do~while和for语句的格式、循环条件的设置以及在循环结构中使用break和continue语句。 ⑵循环程序设计:编写带有循环结构语句及程序。 ⒉ 考试要求 ⑴了解循环的概念,解决语句重复执行的方法。 ⑵理解各种实现循环的语句的执行过程、执行步骤和相关参数量的变化情况,理解break和continue的使用形式和理由。 ⑶掌握循环语句的格式和应用特点,掌握循环程序设计的方法。 五、数组 ⒈ 考试内容 ⑴数组的概念:数组的概念、一维数组和二维数组。 ⑵数组的使用:数组的定义、数组的初始化、数组元素的引用,数组的一般编程方法。⒉ 考试要求 ⑴了解数组的基本概念。 ⑵掌握不同类别数组的特点,掌握数组的定义、初始化和数组元素引用方法;掌握数组的实际应用方式、特点和程序设计方法。 六、函数 ⒈ 考试内容 ⑴函数:函数定义的格式,包括类型、参数及返回值。⑵存储类别:存储类别的含义、使用方法。 ⑶函数的运用:定义函数、调用函数、递归函数。⒉ 考试要求 ⑴理解一般问题的解决方法和程序的结构化、模块化设计思想,理解函数的调用方法,理解变量的数据类型、存储类别,理解内部函数与外部函数的含义。 ⑵掌握函数定义的一般格式,掌握形式参数的表达方式,函数返回值类型和返回值的表达方式,掌握函数调用的方法、特点和不同调用形式(嵌套调用、递归调用),掌握局部变量、全局变量的定义方法和声明形式。 七、指针 ⒈ 考试内容 ⑴指针概念:指针的概念,指针的类型、指针的分类。 ⑵指针的运用:运用指针处理变量、数组、字符串、函数等。⒉ 考试要求 ⑴理解指针的概念、特点,理解指针的分类、指针的数据类型描述。 ⑵掌握指针的含义、不同类型指针与所指变量、数组、字符串、函数等的内在联系。 八、预处理命令 ⒈ 考试内容 ⑴预处理概念:宏的含义,文件包含的含义。 ⑵预处理的运用:无参宏和有参宏,系统头文件的加载。⒉ 考试要求 ⑴理解预处理的含义和理由,理解文件包含的含义和宏的含义。⑵区分宏与函数的异同点;掌握文件包含命令的使用方法。 九、结构体与共用体 ⒈ 考试内容 ⑴结构体与共用体的概念:结构体的含义,共用体的含义。 ⑵结构体与共用体的运用:结构体与共用体的类型声明、初始化和引用。⒉ 考试要求 ⑴了解C语言基本类型与构造类型的含义,了解类型声明与变量等定义的区别。 ⑵掌握结构体、共用体、枚举类型的声明方法和相应变量等的定义、初始化、引用方法。 十、文件 ⒈ 考试内容 ⑴文件的概念:文件的定义、分类和特点。 ⑵文件的基本操作:文件打开与关闭、文件读/写操作,出错检测。⒉ 考试要求 ⑴了解文件的含义、分类和特点。 ⑵理解文件指针的使用方法,掌握文件打开与关闭、文件读写、文件定位和出错检测函数的使用方法。 ⑶掌握不同问题使用文件的定义和操作方法。Ⅲ 考试形式及试卷结构 一、考试形式 闭卷、笔试。考试时间为120分钟,试卷满分为100分。 二、试卷内容比例 数据类型、运算符与表达式 约占10% 顺序结构程序设计、选择结构程序设计、循环程序设计、数组 约占60% 函数、指针 约占15% 预处理命令、结构体与共用体、文件 约占15% 三、试卷题型比例 正误判断题 占10% 单项选择题 占40% 综合题(包括写程序结果、改正程序错误和程序填空等) 占30% 编程题 占20%。 四、试卷难易度比例 试题按其难度分为容易、中等题、难题,三种试题分值的比例为4:4:2 Ⅳ.题型示例 一、正误判断题(每题1分,共10分)1. 算法就是程序。 二、单项选择题(每题2分,共40分)1.下列数据中,为字符常量的是________。A)'My' B)“B” C)Yours D)'K' 三、综合题(每题10分,共30分)1.阅读程序写结果 #include #define NULL 0 struct student{ long num; float score; struct student *next; }; void main() { struct student a,b,c,*head, *p; a.num=1;a.score=90.0; b.num=2;b.score=95.0; c.num=3;c.score=70.0; head=&a; a.next=&b; b.next=&c; c.next=NULL; p=head; do { printf(“%d %5.1fn”,p->num,p->score); p=p->next; } while(p!=NULL);} 四、编程题(每题10分,共20分) 1.计算1至10000之间不能被3或5整除的整数之和。Ⅴ.参考书目 《C程序设计》(第三版),谭浩强编,清华大学出版社,2005年7 月 第3版。 C语言程序设计——飞机订票系统 代码如下:” #include“stdio.h” #include“stdlib.h” #include“string.h” #defineLENsizeof(structplane)#defineMAX 10;structplane { char destination[12];char num[10];char time[12];int price;int amount;};typedefstructplanePLANE;PLANE a[100];void menu();void input();void search();void preserve();void planeadd();void delplane(); void main(){ system(“cls”);menu();} void menu(){ char *menu[] = { ************** 欢迎进入飞机订票系统*************,“ a:输入航线 ”,“ b:查询航线 ”,“ c:退订票系统 ”,“ d:追加航线 ”,“ e:删除航线 ”,“ f: 退出 ”,“****************************************************” };int i;char NO;int quit = 0;do { system(“cls”); for(i = 0;i<9;i++) printf(“n%s”, menu[i]); printf(“n请输入服务代码a,b,c,d,e或fn”); NO = getchar(); switch(NO) { case'a': input();break; case'b': search();break; case'c': preserve();break; case'd': planeadd();break; case'e': delplane();break; case'f': quit = 1;break; } } while(!quit);} void input(){ int i, n;FILE *fp;system(“cls”);if((fp = fopen(“D:file”, “wb”))== NULL){ printf(“error!n”);exit(0);} printf(“n请输入航班总数n:”);scanf(“%d”, &n);printf(“n请按下面提示输入航班信息:起点站:沈阳”);for(i = 0;i printf(“nt请输入终点:”); scanf(“%s”, a[i].destination); printf(“t 航班班次:”); scanf(“%s”, a[i].num); printf(“t 时间:”); scanf(“%s”, a[i].time); printf(“t 票价:”); scanf(“%d”, &a[i].price); printf(“t机票总数:”); scanf(“%d”, &a[i].amount); fwrite(&a[i], sizeof(PLANE), 1, fp);} fclose(fp);} void search(){ int i, j = 0, k = 101;char str[12];FILE *fp;PLANE b[5];if((fp = fopen(“D:file”, “rb”))== NULL){ printf(“error!n”); exit(0);} printf(“n请输入航班号:”);scanf(“%s”, str);while(fread(&b[j], LEN, 1, fp)!= 0) j++;for(i = 0;i if(strcmp(b[i].num, str)== 0) { printf(“沈阳至%s 航班号:%s 时间:%s 票价:%d 剩余票数:%dn”, b[i].destination, b[i].num, b[i].time, b[i].price, b[i].amount); k = i; } if(k == 101) printf(“对不起,没有您需要的航线。”);fclose(fp);system(“pause”);} void preserve(){ int a = 0, i = 0, k, m, n, x;char str[12];PLANE preserve[10];FILE *fp;if((fp = fopen(“D:file”, “rb”))== NULL){ printf(“error!n”); exit(0);} printf(“请输入航班号:”);scanf(“%s”, str);while(fread(&preserve[i], LEN, 1, fp)!= 0){ if(strcmp(preserve[i].num, str)== 0) printf(“沈阳至%s 航班号:%s 时间:%s 价格:%d 剩余票数:%d”, preserve[i].destination, preserve[i].num, preserve[i].time, preserve[i].price, preserve[i].amount); k = i; i++;} fclose(fp);printf(“n请输入订退票代码:0-订票 1-退票”);scanf(“%d”, &m);if(m == 0){ printf(“沈阳至%s 航班号:%s 时间:%s 价格:%d元剩余票数:%d”, preserve[k].destination, preserve[k].num, preserve[k].time, preserve[k].price, preserve[k].amount); printf(“n请输入订票总数n:”); scanf(“%d”, &n); x = preserve[k].price*n; printf(“n应付款%d元”, x); preserve[k].amount = preserve[k].amount1; del = 1; printf(“n成功删除信息!!”);} if(del == 0) { printf(“系统中不存在要删除的信息!”);menu();} else { if((fp = fopen(“D:file”, “wb+”))== NULL);{printf(“文件有错误不能打开!”); exit(0); } } for(i = 0;i fwrite(&delplane[i], LEN, 1, fp); fclose(fp);} } C语言程序设计 实验报告 题 目: 图书管理管理系统 院 系: 信息科技学院 专 业: 姓 名: 学 号: 指导教师: 杨呈勇 日 期: 09-09-18 问题定义 …………………………………………………………………………..3 2 系统设计 ……………………………………………………………………3 2.1 总体设计………………………………………………………………………………4 2.2 详细设计………………………………………………………………………………4 2.2.1 借书模块 ……… ………………………………………………… 4 2.2.2 图书维护………………………………………………………………………… 5 ① 新增记录 …………………………………………………………………… 5 ② 更改系统…………………………………………….………………… 6 ③删除系统 …………………………………………… 6 ④ 查找系统……………………………………………….………………….6 ⑤ 显示系统 ………………………………………………………………….7 3 系统实现 ………………………………………………………………………10 3.1 编码 ………………………………………………………………………8 3.1.1 程序预处理 ……….……………………………………………………………9 3.1.2 主函数main()……….……………………………………………………….9 4 系统维护 ………………………………………………………………………16 5 归纳总结 ………………………………………………………………………16 5.1 开发经验 ………………………………………………………………………16 5.2 实训中遇到的问题及解决方法 ………………………………………………16 5.3 设计中的不足之处……………………………………………………………………16 5.4 感想和心得体会 ……………………………………………………………………16 图书管理系统 本题目设计目的是训练学生的基本编程能力,了解管理信息系统的开发流程,熟悉C语言的文件和单链表的各种基本操作。本程序中涉及结构体、单链表、文件及各种语句的运用如for();switch();if….else等方面的知识。通过本程序的训练,使学生能对C语言的文件操作有一个更深刻的了解,初步掌握链表的一些结构及构成。掌握利用单链表存储结构实现对学生成绩管理的原理,为进一步开发出高质量的管理信息系统打下坚实的基础。 1、问题定义 图书信息包括:编号、书名、作者名、分类号、出版单位、出版时间、库存数量,价格等。试设计一图书信息管理系统,使之能提供以下功能:(1)系统以菜单方式工作 (2)图书信息录入功能(图书信息用文件保存)(3)图书信息浏览功能(4)图书信息查询功能 查询方式:可以按书名,按作者名,按出版单位,按出版时间进行查询。(5)图书信息的删除与修改 在问题定义阶段要考虑题目的可行性和需求分析,接下来进入开发阶段,完成系统设计和系统实现的任务。 2、系统设计 2.1 总体设计 采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。需要注意的是划分出来的模块应该相对独立但又相关,且容易理 解。可以用模块化层次结构图(即模块图)来分析其任务的划分,一般从上到下进行,最上面一层是主模块,下面各层是其上一层模块的逐步细化描述。 图2.1 图书管理系统功能模块图 本图书管理系统要求采用单链表实现,如图2.1所示,它由如下四大功能模块组成: 借书模块。通过输入读者的编号和图书的编号,查找到要该借的书,完成借书这一项任务 还书模块。通过输入读者的编号和图书的编号,查找到要该还的书,完成还书这一项任务 图书维护模块。完成对图书信息的维护。在此图书管理系统中,它实现了对图书信息的新曾、更改、删除、查找和显示操作,并将追加后的数据存入源数据文件。读者维护模块。一是实现对读者记录的存盘,即将读者信息写入数据文件中; 2.2 详细设计 2.2.1 借书模块 通过输入读者的信息和要借的书的编号。系统显示相应的内容,若该文件中没有数据,系统会提示单链表为空,没有任何读者记录或图书操作,此时,用户应选择调用create()函数,进行读者记录的输入,即完成在单链表1中添加记录的操作。值得一提的是,这里的字符串和数值的输入分别采用了函数来实现,在函数中完成输入数据任务,并对数据进行条件判断,直到满足条件为止,这样一来,大大减少了代码的重复和冗余,符合模块化程序设计的特点。 2.2.2 还书模块 还书模块主要实现了在单链表中按读者和图书的编号查找满足相关条件的借书记录。在 用户选择4,调用查询函数search()中,为指向保存了读者信息的单链表的首地址的指针变量。为了遵循模块化编程的原则,我们将在单链表中进行的指针定位操作,设计一个 int retbook(int bookid) { for(int i=0;i { if(borbook[i]==bookid) { borbook[i]=0; return 1; } } return 0; } //读出读者信息 void disp() { cout << setw(5)<< no < for(int i=0;i if(borbook[i]!=0) cout << borbook[i] << “|”; cout << “]”< } }; 若没有该记录,则显示无此记录,返回到上一操作。 2.2.3 图书维护模块 此模块主要实现了对图书记录的新增、更改、删除、查找和显示操作。因为图书记录是以单链表的结构形式存储的,所以这些操作都在单链表中完成。下面分别介绍着4个功能模块。 ①新增记录。该操作需要对单链表中目标节点的数据域中的值进行追加新增要输入图书的编号和书名,int addbook(int n,char *na) { Book *p=query(n); if(NULL==p) { top++; book[top].addbook(n,na); return 1; } return 0; } ②更改系统。该操作可以将原本错误的图书记录更改,将之改为正确的记录。首先输入原来的记录的图书的编号,在此之后输入新的记录的书名。 ③删除系统。该操作可以将原本记录得图书信息,在不用之后选择将此删除的一种方法,在弹出的窗口输入原来的图书的编号,就可以将之删除。 ④ 查找系统。该操作可以帮助读者快速找到将要借的图书,只要输入图书的编号,如果有这本书,就将显示出。反之就会显示不存在。Book *query(int bookid) { for(int i=0;i<=top;i++) if(book[i].getno()==bookid &&book[i].gettag()==0) { return &book[i]; } return NULL; } ⑤显示系统。该操作可以显示出图书现在的信息。cout << “输入图书编号:”< cin >> bookid; cout << “输入图书书名:”< cin >> bname; addbook(bookid,bname); break; case '2': cout << “输入图书编号:”< cin >> bookid; b=query(bookid); if(b==NULL) { cout << “ 该图书不存在 ”< break; } cout << “输入新的书名:”< cin >> bname; b->setname(bname); break; case '3': cout <<“ 读入图书编号:”< cin >> bookid; b=query(bookid); if(b==NULL) { cout <<“ 该图书不存在” << endl; break; } b->delbook(); break; case '4': cout << “ 读入图书编号:”< cin >> bookid; b=query(bookid); if(b==NULL) { cout <<“ 该图书不存在”<< endl; break; } b->disp(); break; case '5': disp(); break; case '6': clear(); break; default:cout<<“输入错误,请从新输入:”; } } }cout << “输入图书编号:”< cin >> bookid; cout << “输入图书书名:”< cin >> bname; addbook(bookid,bname); break; case '2': cout << “输入图书编号:”< cin >> bookid; b=query(bookid); if(b==NULL) { cout << “ 该图书不存在 ”< break; } cout << “输入新的书名:”< cin >> bname; b->setname(bname); break; case '3': cout <<“ 读入图书编号:”< cin >> bookid; b=query(bookid); if(b==NULL) { cout <<“ 该图书不存在” << endl; break; } b->delbook(); break; case '4': cout << “ 读入图书编号:”< cin >> bookid; b=query(bookid); if(b==NULL) { cout <<“ 该图书不存在”<< endl; break; } b->disp(); break; case '5': disp(); break; case '6': clear(); break; default:cout<<“输入错误,请从新输入:”; } } } cout << “输入图书编号:”< cin >> bookid; cout << “输入图书书名:”< cin >> bname; addbook(bookid,bname); break; case '2': cout << “输入图书编号:”< cin >> bookid; b=query(bookid); if(b==NULL) { cout << “ 该图书不存在 ”< break; } cout << “输入新的书名:”< cin >> bname; b->setname(bname); break; case '3': cout <<“ 读入图书编号:”< cin >> bookid; b=query(bookid); if(b==NULL) { cout <<“ 该图书不存在” << endl; break; } b->delbook(); break; case '4': cout << “ 读入图书编号:”< cin >> bookid; b=query(bookid); if(b==NULL) { cout <<“ 该图书不存在”<< endl; break; } b->disp(); break; case '5': disp(); break; case '6': clear(); break; default:cout<<“输入错误,请从新输入:”; } } 3、系统实现 3.1 编码 3.1.2 主函数main()include #include #include //输入/输出文件流类 #include using namespace std; //最多的读者 const int Maxr=100; //最多的图书 const int Maxb=100; //每位读者最多借五本书 const int Maxbor=5; //图书库类,实现对图书的维护,查找,删除等 class BDatabase { private: //图书记录指针 int top; //图书记录 Book book[Maxb]; public: //构造函数,将book.txt读到book[]中 BDatabase() { Book b; top=-1; fstream file(“book.txt”,ios::in); while(1) { file.read((char *)&b,sizeof(b)); if(!file)break; top++; book[top]=b; } file.close(); } //全删 void clear() { top=-1; } //增加图书 int addbook(int n,char *na) { Book *p=query(n); if(NULL==p) { top++; book[top].addbook(n,na); return 1; } return 0; } //查找图书 Book *query(int bookid) { for(int i=0;i<=top;i++) if(book[i].getno()==bookid &&book[i].gettag()==0) { return &book[i]; } return NULL; } //图书库维护 void bookdata(); void disp() { for(int i=0;i<=top;i++) if(book[i].gettag()==0) book[i].disp(); } //析构函数,将book[]写到book.txt文件中 ~BDatabase() { fstream file(“book.txt”,ios::out); for(int i=0;i<=top;i++) if(book[i].gettag()==0) file.write((char *)&book[i],sizeof(book[i])); file.close(); } }; void BDatabase::bookdata() { char choice; char bname[40]; int bookid; Book *b; while(choice!='0') { cout <<“nnnttt图 书 维 护 ”< cout<<“tt1 新 增n tt2 更 改ntt3 删 除ntt4 查 找ntt5 显 示ntt6 全 删ntt0 退 出”< cin >> choice; switch(choice) { case '1': cout << “输入图书编号:”< cin >> bookid; cout << “输入图书书名:”< cin >> bname; addbook(bookid,bname); break; case '2': cout << “输入图书编号:”< cin >> bookid; b=query(bookid); if(b==NULL) { cout << “ 该图书不存在 ”< break; } cout << “输入新的书名:”< cin >> bname; b->setname(bname); break; case '3': cout <<“ 读入图书编号:”< cin >> bookid; b=query(bookid); if(b==NULL) { cout <<“ 该图书不存在” << endl; break; } b->delbook(); break; case '4': cout << “ 读入图书编号:”< cin >> bookid; b=query(bookid); if(b==NULL) { cout <<“ 该图书不存在”<< endl; break; } b->disp(); break; case '5': disp(); break; case '6': clear(); break; default:cout<<“输入错误,请从新输入:”; } } } //main()函数的实现,程序的主界面的引导 int main() { char choice; int bookid,readerid; RDatabase ReaderDB; Reader *r; BDatabase BookDB; Book *b; while(choice!='0') { cout < cout <<“ttt1 借 书nnttt2 还 书 nnttt3 图 书 维 护nnttt4 读 者 维 护nnttt0 离 开”< cin >> choice; switch(choice) { case '1': cout <<“ 借书 读者编号:”; cin >>readerid; cout <<“ 图书编号: ”; cin >>bookid; //按编号查找 r=ReaderDB.query(readerid); if(NULL==r) { cout <<“ 不存在该读者,不能借书”<< endl; break; } b=BookDB.query(bookid); if(b==NULL) { cout <<“ 不存在该图书,不能借书”<< endl; break; } if(b->borrowbook()==0) { cout << “ 该图书已借出,不能借书”<< endl; break; } r->borrowbook(b->getno()); break; case '2': cout<<“还书n 读者编号:”; cin >>readerid; cout << “ 图书编号:”; cin >>bookid; r=ReaderDB.query(readerid); if(r==NULL) { cout <<“ 不存在该读者,不能还书” << endl; break; } b=BookDB.query(bookid); if(b==NULL) { cout <<“ 不存在该图书,不能还书” < break; } b->retbook(); r->retbook(b->getno()); break; case '3': BookDB.bookdata(); break; case '4': ReaderDB.readerdata(); break; default:cout<<“输入错误,请从新输入:”; 4、系统维护 经测试与调试确认软件无错时,开发就告一段落,这时可以交付软件供用户使用,但是在软件的使用过程中还会面临更加漫长的工作,即软件维护。一般维护的工作有:更改使用中发现的错误;为适应实际环境而对程序进行修改;为满足新的需求而对程序作必要的改进等等。 5、归纳总结 5.1 开发经验 通过对本题目的开发,体会到要掌握以下几点内容。 大程序的设计风格。按“自顶向下,逐步细化,模块化”的方法进行程序设计。 编写主函数,并进行测试与调试。当被调函数又需要调用其他函数时,也要遵循逐步细化的原则。C语言提供丰富的库函数,编程序时要善于使用库函数,避免不必要的劳动。 定义函数时,应选好参数的个数和数据类型。 文件使用方法。文件使用完毕后应及时关闭。 5.2 实训中遇到的问题及解决方法 在实训过程中,我遇到许多的问题,比如有些语句有语法错误,表达式不正确,或缺少}或;等。或者是没有宏定义,申明某些变量。这些都比较容易解决。通过查阅课本和请教同学,在经过WIN-TV编译,知道哪有错误就改一下就行。比较严重的是,我的代码在求解平均成绩和总分时没有录入,且乱码。自已改了很久,也在网上查询但是都不行。最后在老师的帮助下及查阅有关资料,把代码改出来了。 5.3 设计中尚存的不足之处 关于这次的程序,也有挺多不足的地方。首先,我觉得程序还不够完善,比如没有排序前和排序后的学生记录输出结果显示和有些程序功能没有满足所给题目要求及好几项都没有显示出学生具体的信息,甚至有些地方有点乱;其次,有些地方好像功能有点重复了,且编写的代码有重复;最后,就是该程序界面不够美观大方,有些文件不能链接。 5.4 感想和心得体会 通过这次实训,我感触甚深,要把所学的理论知识运用于解决实际问题不仅要付出艰辛的劳动,还得要有科学的方法和坚持不懈的努力。加上我们只是学了一个学期的c语言,我们所学的知识还不足以独立编写程序代码。但是我认为只要我们认真的去学去做,我们会受益非浅。这次实训让我进一步理解了“编程是什么”,“如何去编程”,“编程的目的又是什么”,„„发现自己的知识竟是如此贫乏,顿时感到了压力的存在,从而也激发了我的学习热情。它会成为我今后不断进取、永不懈怠的动力。 在整个实训过程中,老师给了我很大的帮助,使我由不了解怎样运用链表到逐渐懂得链表的结构及初步掌握链表结构。还重新复习了一些语句的使用,比如for(0;switch();if….elser();结构体的使用;枚举等。而且我能够坚持虚心的向老师以及同学请教问题。它使我明白了虚心好学的重要性,更让我懂得了如何跟老师同学去相处、去沟通。没有老师和同学们的无私帮助,我不可能圆满完成这次实训任务。非常感谢帮助过我的所有老师和同学们,在此,谨向他们一并表示感谢!我开始喜欢这个程序设计了,尤其觉得它是很有挑战性的,是对知识点扎实程度的考察,也是对个人能力的考察,还是对个人化毅力的考验。它让我明白做任何事都不应该轻易放弃。这样的课程设计,既有利于教学,又可以教会学生书本以外的很多知识。现在我对它越来越感兴趣,今后我会更加关注C语言程序,把C语言学好。希望老师以后多多指导,给予一定的帮助! #include “stdio.h” #include “stdlib.h” #include “string.h” #include “conio.h” #include “stdlib.h” #define null 0 struct record { char name[20];char phone[20];char adress[40];char postcode[10];char e_mail[30];}student[500];struct LinkList { struct record US;struct LinkList *next;}a;struct LinkList *head=null;int num=0;FILE *fp;int menu_select();int adduser();int list();int search();int display();int add();int listbyname();int dele();int save();int exit(); void main(){ system(“cls”);for(;;){ switch(menu_select()){ case 0:adduser();break;case 1:list();break;case 2:search();break;case 3:add();break;case 4:dele();break;case 5:save();break;case 6:exit(0);} } } menu_select(){ char s[80];int a;printf(“*_* press any key enter menu!*_* n”);getch();system(“cls”);printf(“tt********************MENU*********************nn”);printf(“tt 0.输入记录n”);printf(“tt 1.显示记录 n”);printf(“tt 2.按姓名查找n”);printf(“tt 3.插入记录 n”);printf(“tt 4.删除记录n”);printf(“tt 5.记录保存文件n”);printf(“tt 6.Quitn”);printf(“tt***********************************************n”);do{ printf(“n Enter you choice(0~11):”);scanf(“%s”,s);a=atoi(s);} while(a<0||a>11);return a;} adduser(){ printf(“ntt**************** 请输入用户信息 ****************n”);printf(“ntt输入姓名:”);scanf(“%s”,&student[num].name);printf(“ntt输入电话号码:”);scanf(“%s”,&student[num].phone);printf(“ntt输入地址:”);scanf(“%s”,&student[num].adress);printf(“ntt输入邮编:”);scanf(“%s”,&student[num].postcode);printf(“ntt输入e-mail:”);scanf(“%s”,&student[num].e_mail);num++;printf(“ntt是否继续添加?(Y/N):”);if(getch()=='y')adduser();return(0);} list(){ int i;system(“cls”);if(num!=0){ printf(“ntt*************** 以下为通讯录所有信息************”);for(i=0;i printf(“ntt姓名: %s”,student[i].name);printf(“ntt电话: %s”,student[i].phone);printf(“ntt地址: %s”,student[i].adress);printf(“ntt邮编: %s”,student[i].postcode);printf(“ntte-mail:%s”,student[i].e_mail);printf(“tt”);if(i+1 add(){ int i;if((fp=fopen(“student.bin”,“wb”))==NULL){ printf(“ntt文件打开失败”);} for(i=0;i save(){ int j;FILE*fp;fp=fopen(“student.txt”,“w”);if(fp==NULL)printf(“can't open the file.”);if(num!=0){ for(j=0;j fwrite(student,sizeof(student),1,fp);} } printf(“保存成功!”);fclose(fp);return(0);}第二篇:C语言程序设计考试大纲
第三篇:C语言程序设计——飞机订票系统
第四篇:C语言程序设计图书管理系统
第五篇:C语言程序设计学生通讯录管理系统