还剩24页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
《数据结构与算法》课程设计指导书一.目的通过本课程设计,使同学更加系统地理解和掌握数据结构的基本概念;能自如地根据实际要求,设计相应的数据结构,并运用C或C++语言实现所设计的算法,能够利用所学的基本知识和技能,分析和解决简单的程序设计问题,为后续其它专业课程的学习和应用打下良好基础二.题目根据指导教师的具体要求,从下面题目中选择1个来完成1.学生成绩管理系统2.简易客房管理系统3.人事档案管理系统4.进销存货物管理系统5.图书管理系统6.运动会分数统计7.民航订票系统8.校园导游__9.大数相乘问题10.长整数的加减法11.表达式的求值12.日历系统13.钱币的转换14.二叉树的应用——哈夫曼树15.银行排队系统模拟16.其他题目(需老师同意)注意,在实现相关管理系统题目时,需要设计良好的数据结构,代码编写时不允许运用现有的数据库管理系统,具体功能应通过对文件的读写操作实现三.任务完成形式1.完整的软件系统“真实”数据(如对于记录文件,需要有5条以上记录);使用说明文件的第一行,需要给出设计者的学号、姓名,后面为其它说明2.课程设计报告详细要求请参考附录二课程设计报告总体上主要包括以下几个部分1)封面2)目录3)课程设计报告正文4)使用说明5)____四.总体要求1.每道题目的程序代码总量不少于600行(其中不包括自动生成代码),有合理注释2.课程设计报告正文字数不少于8000字,概念清楚、叙述正确、内容完整、书写规范3.__完成课程设计,不得抄袭他人4.功能正确、有一定实用性5.尽可能大量使用各种C或者C++语言程序设计技术,尤其在以下几个方面指针及其运算、结构、指针数组、数组指针、字符数组与字符串、内存空间动态申请与释放、文件访问与操作、合理的常量与全局变量及函数接口变量定义、数据输入与数据格式检查、数据类型转换、错误处理、工程设计技术(整个系统由一个工程文件、若干个程序文件、若干头文件、甚至库文件等组成)程序界面不做较高要求,但要考虑到用户使用的方便,有较好的交互界面6.可以使用VC编译环境__程序,但不允许使用现成的数据库如ac__ss,SQLServer等完成上面的课程设计题目,否则成绩评定为不及格7.设计时适当考虑程序的可维护性与可扩充性8.提倡积极交流与讨论(同学间、bbs站点)、善于查阅资料、分析与借鉴他人编写的软件9.认真自觉以个人为单位完成自己的任务,代码和课设报告均严禁雷同,否则成绩为不及格验收时查看代码,并提出若干个跟程序代码有关的问题,并把问题回答情况计入总评成绩
10、根据不同的数据结构,要求有一种数据结构算法(冒泡排序算法不包括)五.工作阶段与考核方法大体上可分成五个阶段1.资料查阅准备阶段(15%)2.分析设计阶段(35%)3.编程调试阶段(40%)4.课程设计报告书写阶段(10%)5.验收阶段考核方法只有程序验收通过后,才能按以__法核定本次课程设计的总成绩,因未能__完成设计(尤其是抄袭)或概念不清的同学,总成绩将核定为不及格总成绩由以下几个部分决定1.考勤、纪律、实验室卫生2.工作量(代码量、功能多少、难度)3.关键技术4.实用性、创新5.代码书写规范性6.程序界面、新技术引用7.课程设计报告(叙述、书写规范、字数)8.动手能力、分析问题解决问题能力六.任务具体要求
1、学生成绩管理系统问题描述该系统实现对若干个大学生的学习成绩进行管理至少包括以下信息学号、姓名、科目、成绩,学期学期取值范围可为1-8功能要求1.使用中文菜单,界面设计和用户输入输出要人性化些;
2.将学生信息保存在文本文档中,具体对学生信息进行插入删除查询操作时,将保存在文本文档中的学生信息提取出来,保存在自己定义的数据结构中,然后再对该数据结构进行操作,所有操作完成,或者在相应的命令后,再将学生信息保存到文本文档中3.具有数据输入功能,输入的数据能最终保存在文件中;4.具有数据删除功能,能最终从文件中删除;5.排序功能,根据自己设计的数据结构,设计排序算法6.具有多种查询(如按学号查询、按姓名查询、按成绩查询等)及输出功能;7.其它功能(如各种统计,统计每个学生所有课程的平均分,统计某门课程所有学生的平均分等等)8.学生信息的修改(比如修改学生姓名,修改学生某门课程的成绩)说明
(1)功能各方面越完善越好
(2)自定义的数据结构可以使用数组,链表,树等,可以使用多种数据结构来存放数据,然后在其上使用不同的排序算法
(3)若用数组,必须动态分配空间(文本文件中最好有一行表示学生人数)算法要点把问题看成是对线性表的操作将学生成绩组织成顺序表,则登记学生成绩即是建立顺序表操作;查询学生成绩、插入学生成绩、删除学生成绩即是在顺序表中进行查找、插入和删除操作
2、简易客房管理系统问题描述该系统能简单实现对客栈的住宿情况进行管理至少包括以下信息房号、__、单价(每床)、已住人数;住客姓名、性别、年龄、身份、___号码,房号,床号,入住日期、入住时间、离店日期、离店时间这些信息应存放在两个文件中,分别是客房信息文件、住客信息文件“__”可取值1-3,分别表示单人间、双人间、通铺(可以住很多人的__)功能要求1.具有建立数据文件客房信息文件、住客信息文件功能;2.具有数据输入功能;3.具有数据修改功能;4.具有数据删除功能;5.能查询(查找)一些基本信息(如按房号查询、按姓名查询、空余客房查询等);6.具有多种统计功能(要求有一定的实用性)(如某客房当前有那些空床、某住客应付多少费用、某天住店总人数和总收入等)7.能具有排序功能(比如在查询所有的客房信息时,能根据____进行排序,方便客人挑选__等等)说明
(1)功能各方面越完善越好
(2)自定义的数据结构可以使用数组,链表,树等,可以使用多种数据结构来存放数据,然后在其上使用不同的排序算法
(3)若用数组,必须动态分配空间(文本文件中最好有一行来表示数组应该有多大,这样便于动态分配空间)
3、人事档案管理系统问题描述该系统能简单实现对人事档案的管理该系统包括:人员基本情况管理、工资管理和考勤管理等几个方面的功能用户通过输入工资、考勤、职工履历等基本信息由系统自行生成相应的统计数据以供用户查询能对这些基本信息进行更新和删除至少包括以下信息人员履历表员工编号,员工姓名,性别,年龄,部门,职位,受教育年限职工工资表员工编号,基本工资,缺勤扣发工资,扣税,实发工资月考勤登记表员工编号,月缺勤天数注假设每个员工每天缺勤扣发工资的多少跟其基本工资存在一定关系,比如是该基本工资的20分之一;假设扣税金额=(基本工资-缺勤扣发工资-2000)×10%,而若基本工资-缺勤扣发工资-2000的值小于2000则扣税金额为0功能要求1.具有建立数据文件人员履历表文件、职工工资表文件、月考勤登记表功能;2.具有数据输入功能;3.具有数据修改功能;4.具有数据删除功能;5.能查询(查找)一些基本信息(如按员工编号查询、按员工姓名和部门组合查询等,如生成各部门员工花名册);6.具有多种统计功能(要求有一定的实用性)(如不同部门的员工平均工资比较(除了用数字表示外,也可以用星号画图的方式来直观的表示);不同性别员工工资比较;某部门内部,不同职位员工工资比较;不同受教育水平人的平均工资比较;部门最高实发工资等等)7.具有排序功能(比如将各部门职工工资平均值进行排序,将部门内部职工工资进行排序等等)各个功能模块简要叙述(具体实现时,并不局限于这些功能,越完善越好)人员基本情况管理提供对”人员履历表”数据输入、组合条件查询、统计功能;职工工资管理提供对”职工工资表”数据的输入、查询、按统计、显示功能完成每月对“职工工资表”数据的月统计以此生成“职工工资总额构成情况表”实现该表的查询、显示功能职工考勤管理提供对各部门“月考勤登记表”数据的录入、查询、统计功能;说明
(1)功能各方面越完善越好
(2)自定义的数据结构可以使用数组,链表,树等,可以使用多种数据结构来存放数据,然后在其上使用不同的排序算法
(3)若用数组,必须动态分配空间(文本文件中最好有一行来表示数组应该有多大,这样便于动态分配空间)
4、进销存货物管理系统问题描述该系统能进行简单的货物管理,进货,销售货物,退货等管理至少包括如下信息货物标号,货物名称,货物产地,入库__,入库时间,现存货物数量,已经销售数量,销售平均单价注每次销售后,都需要对现存货物数量进行更新,对已销售数量进行更新,也需要对销售平均单价进行更新功能要求1.具有建立数据文件货物管理表的功能;2.具有数据输入功能;3.具有数据修改功能;4.具有数据删除功能(当一些已经过时陈旧的商品被__处理后,将其删除,不再进货);5.能查询(查找)一些基本信息(如能查询剩余件数小于某个特定值的商品,以便于及时进货);6.具有多种统计功能(要求有一定的实用性)(如统计每种货物是否有盈利(将销售平均单价跟入库__进行比较),所有货物的盈利或亏损等等)7.具有排序功能(比如对货物盈利水平进行排序比较等等)说明
(1)功能各方面越完善越好
(2)自定义的数据结构可以使用数组,链表,树等,可以使用多种数据结构来存放数据,然后在其上使用不同的排序算法
(3)若用数组,必须动态分配空间(文本文件中最好有一行来表示数组应该有多大,这样便于动态分配空间)
5、图书管理系统问题描述该系统能进行简单的图书管理功能至少包括如下信息图书编号,图书名称,__,出版社,总共册数,在馆册数,现存地址,借阅次数注现存地址是假设图书馆有多个书库,不同种类的书存放于不同的地方功能要求1.具有建立数据文件图书信息的功能;2.具有数据输入功能;3.具有数据修改功能(借书或者还书都需要修改图书数量信息);4.具有数据删除功能(当图书因为年代久远,或者遗失,也许需要对其进行删除操作);5.能查询(查找)一些基本信息(这里的查询功能应该较为强大,能通过__进行查询,书名查询,或者结合__出版社一起进行查询等等)6.具有多种统计功能(要求有一定的实用性)(如统计每本书的借阅次数,方便将来新近图书统计每个书库中图书的数量等等)7.具有排序功能(比如对每本图书的借阅次数进行排序)各个功能模块简要叙述(具体实现时,并不局限于这些功能,越完善越好)新近图书在图书信息表中添加相应信息;旧书处理在图书信息表中删除相应信息;借书还书对图书信息表进行修改,若在馆册书为0,则不允许继续借阅;图书信息的统计图书信息的排序图书信息的查找说明
(1)功能各方面越完善越好
(2)自定义的数据结构可以使用数组,链表,树等,可以使用多种数据结构来存放数据,然后在其上使用不同的排序算法
(3)若用数组,必须动态分配空间(文本文件中最好有一行来表示数组应该有多大,这样便于动态分配空间)
6、运动会分数统计问题描述参加运动会有n个学校学校编号为1……n.比赛分成m个男子项目和w个女子项目.项目编号为男子
1......m女子m+
1......m+w.不同的项目取前五名或前三名积分;取前五名的积分分别为:
7、
5、
3、
2、1,前三名的积分分别为
5、
3、2;哪些取前五名或前三名由同学自己设定(m=20n=20)功能要求
1.可以输入各个项目的前三名或前五名的成绩;
2.能统计各学校总分;
3.可以按学校编号、学校总分、男女团体总分排序输出;
4.可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校 规定输入数据形式和范围20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)输出形式有中文提示,各学校分数为整形界面要求有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求存储结构学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中
7、民航订票系统任务通过此系统可以实现如下功能1.录入可以录入__情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)2.查询可以查询某个航线的情况(如,输入__号,查询起降时间,起飞抵达城市,__票价,票价折扣,确定__是否满仓);可以输入起飞抵达城市,查询飞机__情况,最近一天__的日期和余票额.;3.订票业务;据顾客要求__号订票额查询该__票额情况若有余票__售票手续输出座位号;若已满员或票额不足则另询顾客要求.若需要可预约登记排队等候.4.退票业务:根据顾客情况日期__为顾客__退票手续然后查询该__是否有人预约登记首先询问排在第一位的顾客若退票额能满足他的要求则为他__退票手续否则依次询问其他排队预约的顾客.5.修改__信息当__信息改变可以修改__数据文件基本要求1.根据以上功能说明,设计__信息,订票信息的存储结构,设计程序完成功能;2.界面要求有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求
8、校园导游__问题描述设计校园导游程序,为来访的客人提供服务基本要求
(1)假设有一所校园的平面图,所含景点不小于10个,请选择适当的坐标来表示出该图上的各个景点;
(2)为来访的客人提供从当前位置到其他景点的最短路径的__;
(3)必须具有校园平面图的修改和扩充功能(即某些景点坐标的修改和景点个数的增加)
9、大数相乘问题
10、长整数的加减运算问题描述设计一个实现任意长的整数进行加法运算的演示程序基本要求利用双向循环链表实现长整数的存储,每个结点含一个整型变量任何整型变量的范围是-(215-1)~(215-1)输入输出形式按照中国对于长整数的表示习惯,每四位是一组,组间用逗号隔开更高要求
(1)长整数的减法
(2)多个长整数的连续加减法,并带括号等具体方式可以参见表达式的求值部分,利用栈测试数据
(1)0;0;应输出“0”
(2)-2345,67__;-7654,3211;应输出“-1,0000,0000”
(3)-9999,9999;1,0000,0000,0000;应输出“9999,0000,0001”
(4)1,0001,0001;-1,0001,0001;应输出“0”
(5)1,0001,0001;-1,0001,0000;应输出“1”
(6)-9999,9999,9999;-9999,9999,9999;应输出“-1,9999,9999,9998”
(7)1,0000,9999,9999;1;应输出“1,0001,0000,0000”实现提示
(1)每个结点中可以存放的最大整数为215-1=32767,才能保证两数相加不会溢出但若这样存,即相当于按32768进制数存,在十进制数与32768进制数之间的转换十分不方便故可以在每个结点中仅存十进制数的4位,即不超过9999的非负整数整个链表是为万进制数
(2)可以利用头结点数据域的符号代表长整数的符号用其绝对值表示元素结点数目相加过程中不要破坏两个操作数链表两操作数的头指针存于指针数组中是简化程序结构的一种方法不能给长整数位数规定上限
11、表达式的求值 表达式求值要求例如,输入25*12-27/3+2*5=则程序运行后输出25*12-27/3+2*5=85设计要求以字符序列的形式从终端输入不含变量的算术表达式(整数和实数都要考虑),利用给定的算符优先关系,实现对算术四则混合运算表达式的求值,基本要求
(1)输入四则表达式(有括号和加减乘除,且表达式中有可能会出现带小数点的浮点数);
(2)判断表达式是否合法(括号是否匹配);
(3)按照运算符的优先级计算算术表达式的值更高要求
(1)演示在求值过程中运算符栈、操作数栈的变化过程
(2)判断表达式的语法是否正确(比如1++2就是错误的)
12、日历系统功能要求1)输入任一年将显示出该年的所有月份日期,对应的星期2)注意闰年情况其显示格式要求如下1)月份中文英文都可以,2)下一行显示星期,从周日到周六,中英文都可以3)下一行开始显示日期从1号开始,并按其是周几实际情况与上面的星期数垂直对齐当输入2004显示如下输入要显示日历的年份:2004输入该年1月1日是星期几4输出日历如下Thecalendaroftheyear
2004.Januray1February2SunMonTueWedThuFriSatSunMonTueWedThuFriSat123123456745678910891011121314111213141516171516171819202118192021222324222324252627282526272829303129======================================================__rch3April4SunMonTueWedThuFriSatSunMonTueWedThuFriSat12345612378910111213456789101415161718192011121314151617212223242526271819202122232428293031252627282930======================================================
13、钱币的转换银行经常需要进行输入输出大小写的转换要求
(1)编写程序实现将___数字表示的钱币数,表示为用中文表示的钱币书比如输入
10.2元,则输出拾元贰角三分
(2)编写程序实现将中文表示的钱币数表示为___数字表示的钱币数比如输入三角,则输出
0.3元
(3)需要注意_____0,中文表示是拾万元;
0.3元表示为三角希望大家把具体情况都能考虑清楚设计比较良好的用户提示界面
14、二叉树的应用-哈夫曼树(电文的编码和译码)哈夫曼编码/译码器问题描述设计一个哈夫曼编码/译码系统,对字符串进行编码/译码基本要求
(1)从键盘输入字符串,以回车结束;
(2)根据字符串中字符出现的概率进行哈夫曼编码;)
(3)并输出编码结果和编码表;
(4)根据编码结果和编码表还原字符串;
(5)输出编码过程中构造的哈夫曼树内容理解二叉树的基本概念,并在读懂下面详细描述的算法的情况下,编写一个有关二叉树的简单应用程序-电文的编码和译码具体实验题目和功能要求如下
(1)电文编码假如有一份电文__使用5个字符a、b、c、d、e,它们的出现频率依次为
4、
7、
5、
2、9,试画出对应的哈夫曼树请按左子树根结点的权小于等于右子树根结点的权的次序构造,并求出每个字符的哈夫曼编码其中得到的哈夫曼树和哈夫曼编码如下图1要求自己编程实现若从键盘输入若干字符,同时并输入它们各自出现的频率,最后能计算并在屏幕上显示出每个字符的代码
(2)电文译码给出一段二进制代码的电文,要求根据前面构造的huff__n树进行译码在前面编码的基础上,键盘输入一段电文,则能在屏幕上显示出自动翻译好的电文比如根据图1显示的哈夫曼树,键盘输入电文如下1011010,屏幕上能显示自动翻译的结果为bed说明事项
1.通过上面的描述本课程设计题目包括
(1)电文的编码
(2)电文的译码,要求必须用哈夫曼树实现
2.界面要求有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求并要明确,只有在使用哈夫曼树进行编码的前提下,才有可能进行译码
3.考虑将此程序设计完善,比如可以将编码后的字符代码保存到文件中,将需要翻译的代码保存到另一个文件中,最后把自动翻译后的结果也保存到文本文档中等等在这个程序中,首先要构造一棵哈夫曼树,然后才能根据这棵哈夫曼树构造编码因此,步骤一构造哈夫曼树步骤二根据哈夫曼树为每个字符编码步骤三根据步骤二中构造好的哈夫曼树进行译码提示具体算法见后面的有关哈夫曼树的基础知识介绍部分代码(仅供参考)如下constintN=5;//叶子结点数目constintTREENODENUM=2*N-1;//结点总数//huff__n树结点的结构typedefchardataType;typedefstruct{floatweight;dataTypedata;intlchildrchildparent;}huff__nTreeNode;//哈夫曼编码的结构typedefstruct{charbits[N];//详细的编码,不过是反的,要从cnt开始读intcnt;//记录这个字符数由几位bit表示的dataTypedata;//编码要表示的字母}codeType;有关哈夫曼树的基础知识介绍
(1)哈夫曼树的定义哈夫曼树设有个权值,构造一棵有个叶子结点的二叉树,每个叶子结点的权值为,则最小的二叉树叫哈夫曼树其中为权值为结点到根到路径长度为叶子结点数
(2)构造Huff__n树的方法——Huff__n算法构造Huff__n树步骤如下
①根据给定的n个权值{w1w2……wn},构造n棵只有根结点的二叉树,令其权值为wj
②在森林中选取两棵根结点权值最小的树作左右子树,构造一棵新的二叉树,置新二叉树根结点权值为其左右子树根结点权值之和
③在森林中删除这两棵树,同时将新得到的二叉树加入森林中
④重复上述两步,直到只含一棵树为止,这棵树即哈夫曼树例如第一步n棵只有根结点的二叉树,每个结点有相应代表的符号和权值第二步从中挑出权值最小的合并生成一棵新的树,置新生成的二叉树的根结点第三步不断重复第二步,直到只有一个根结点第四步最后完成一棵huff__n树哈夫曼树结点的存储结构
(3)哈夫曼树应用(哈夫曼编码)哈夫曼树中没有度为1的结点,称为严格的二叉树哈夫曼编码数据通信用的二进制编码思想根据字符出现频率编码,使电文总长最短编码根据字符出现频率构造哈夫曼树,然后将树中结点引向其左孩子的分支标“0”,引向其右孩子的分支标“1”;每个字符的编码即为从根到每个叶子到路径上得到到
0、1序列例如要传输到字符集D={C,A,S,T,;}字符出现频率w={2,4,2,3,3}得到的哈夫曼树和哈夫曼编码为
(4)Huff__n编码算法的基本思想从叶子tree[i]出发,利用双亲地址找到双亲结点tree[p],再利用tree[p]的lchild和rchild指针域判断tree[i]是tree[p]的左孩子还是右孩子,然后决定分配代码是“0”还是“1”,然后以tree[p]为出发点继续向上回溯,直到根结点为止
(5)Huff__n译码算法的基本思想从Huff__n树根开始,从待译码电文中逐位取码若编码是“0”,则向左走;若编码是“1”,则向右走,一旦到达叶子结点,则译出一个字符;再重新从根出发,直到电文结束
15、银行排队系统模拟假设某银行有n个窗口对外接待客户,从早晨银行9点开门起到5点关门,不断有客户进入银行,由于每个窗口在某个时刻只能接待一个客户因此在客户人数众多时需要在每个窗口前顺次排队,对于刚进银行的客户如果某个窗口的业务员正空闲,则可上前输业务反之,若个窗口均有客户所占,他便会排在为数最少的队伍后面编制一个程序模拟银行的这种业务活动并计算一天中客户在银行的平均逗留时间(提示参考c++primerplus中相关章节或者软件工程专业课表中的飞机场模拟)例子(参考)(C版)题目个人帐簿管理系统设计功能个人帐簿管理系统记录某人每月的全部收入及各项开支情况,包括食品消费,房租,子女教育费用,水电费,医疗费,储蓄等进入系统后可以输入和修改某月的收支情况,可以对每月的开支从小到大进行排序,可以根据输入的月份查询每月的收支情况1.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;2.完成最低要求建立一个文件,包括某人5个月的收支情况,能对文件中的信息进行扩充(追加),修改和删除;3.进一步要求完成对每月的开支排序,以及完成系统查询功能有兴趣的同学可以自己扩充系统功能要求1)界面友好,函数功能要划分好2)总体设计和流程图3)程序要加必要的注释4)要提供程序测试方案5程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的代码如下#includestdio.h#includestdlib.h#includememory.h#includewindows.h//文件保存路径#defineFilePath1Myinfor.dat#defineFilePath2Myinfor.___//查询用声明#defineStatusint#defineOK1#defineError0#defineNotFound2typedefstruct{intmonth;//月份intspxf;//食品消费intf__y;//房租费用intznjy;//子女教育费用intsdfy;//水电费用intylfy;//医疗费用intcxfy;//储蓄费用intsrfy;//收入费用}Infor;typedefstruct{//查询用自定义数据类型intno;intdata;}pType;voidmenuvoid;//菜单voidinputInfor*newI;//接收键盘输入voidwriteinforInfor*newI;//向文件内写入内容voidchangeFor__tvoid;//将dat格式文件转换为___文件StatussearchInfor*a;//查询函数[返回查询的结果及查询的状态]voidpaixuInfor*a;//对查询据结果排序voidmodifyInfor*aintmon;//修改数据voiddelRecordintmon;//删除数据void__in{while1{menu;}}voidmenuvoid{intitem;intmon;Infor*a;a=Infor*__llocsizeofInfor;do{printf\n…………个人帐簿管理系统设计【*****制作】…………\n\n;printf\t\t
1.录入数据\n;printf\t\t
2.查看数据\n;printf\t\t
3.修改数据\n;printf\t\t
4.查询数据\n;printf\t\t
5.排序数据\n;printf\t\t
6.删除数据\n;printf\t\t
0.退出系统\n\n;printf请输入要进行的操作:;scanf%ditem;}whileitem6||item-1;switchitem{//退出程序case0:getchar;getchar;exit1;break;//录入数据case1:inputa;writeinfora;break;//查看数据case2:changeFor__t;break;//修改数据case3:item=searcha;mon=a-month;ifitem!=OKprintf\n没有符合条件的记录!\n;else{printf\n记录月份食品消费房租费用子女费用水电费用医疗费用储蓄费用本月收入\n;printf-----------------------------------------------------------------------\n;printf%7d%8d%8d%8d%8d%8d%8d%8d\na-montha-spxfa-f__ya-znjya-sdfya-ylfya-cxfya-srfy;inputa;modifyamon;}break;//查询数据case4:item=searcha;ifitem!=OKprintf\n没有符合条件的记录!\n;else{printf\n记录月份食品消费房租费用子女费用水电费用医疗费用储蓄费用本月收入\n;printf-----------------------------------------------------------------------\n;printf%7d%8d%8d%8d%8d%8d%8d%8d\na-montha-spxfa-f__ya-znjya-sdfya-ylfya-cxfya-srfy;}break;//排序数据case5:item=searcha;ifitem!=OKprintf\n没有符合条件的记录!\n;elsepaixua;break;//删除数据case6:item=searcha;mon=a-month;ifitem!=OKprintf\n没有符合条件的记录!\n;else{printf\n记录月份食品消费房租费用子女费用水电费用医疗费用储蓄费用本月收入\n;printf-----------------------------------------------------------------------\n;printf%7d%8d%8d%8d%8d%8d%8d%8d\na-montha-spxfa-f__ya-znjya-sdfya-ylfya-cxfya-srfy;delRecordmon;}break;}freea;//释放内存空间}voidinputInfor*newI{printf\n请依次输入数据[说明:中间以空格符隔开]:\n本月月份食品消费房租费用子女费用水电费用医疗费用储蓄费用收入费用\n;scanf%d%d%d%d%d%d%d%dnewI-monthnewI-spxfnewI-f__ynewI-znjynewI-sdfynewI-ylfynewI-cxfynewI-srfy;fflushstdin;}voidwriteinforInfor*newI{FILE*fp;fp=fopenFilePath1ab+;iffp==NULL{printf无法创建文件%sFilePath1;exit0;}fwritenewIsizeofInfor1fp;//这里可以做特别处理可防止存在同一月份有2条以上的记录问题这里就不写了fclosefp;printf数据录入成功!\n;}voidchangeFor__tvoid//暂时只能操作一行文件有待改进{FILE*fp1*fp2;Infor*a;a=Infor*__llocsizeofInfor;fp1=fopenFilePath1rb+;iffp1==NULL{printf无法找到文件%s\nFilePath1;return;//返回主函数}fp2=fopenFilePath2wt+;iffp2==NULL{printf无法创建文件%s\nFilePath2;return;//返回主函数}fputs\n……………………………………个人帐簿管理系统……………………………………\n\nfp2;fputs记录月份食品消费房租费用子女费用水电费用医疗费用储蓄费用本月收入\nfp2;fputs-----------------------------------------------------------------------\nfp2;printf\n记录月份食品消费房租费用子女费用水电费用医疗费用储蓄费用本月收入\n;printf-----------------------------------------------------------------------\n;rewindfp1;freadasizeofInfor1fp1;while!feoffp1{printf%7d%8d%8d%8d%8d%8d%8d%8d\na-montha-spxfa-f__ya-znjya-sdfya-ylfya-cxfya-srfy;fprintffp2%7d%8d%8d%8d%8d%8d%8d%8d\na-montha-spxfa-f__ya-znjya-sdfya-ylfya-cxfya-srfy;freadasizeofInfor1fp1;}fputs-----------------------------------------------------------------------\nfp2;fputs关闭本程序继续原程序!\nfp2;fclosefp1;fclosefp2;systemFilePath2;//调用打开转换的文本文件removeFilePath2;//删除文本文件文件}StatussearchInfor*a{FILE*fp1;intmon;intisfound=0;printf请正确输入要查询的月份;scanf%dmon;fflushstdin;fp1=fopenFilePath1rb+;iffp1==NULL{printf无法找到文件%s\nFilePath1;returnError;//返回主函数}rewindfp1;freadasizeofInfor1fp1;while!feoffp1{ifa-month==mon{isfound=1;break;}else{isfound=0;}freadasizeofInfor1fp1;}fclosefp1;ifisfoundreturnOK;elsereturnNotFound;}voidpaixuInfor*a{inti=0j=0flag=0t;pTypepx
[8]={{00}};charstr
[8]
[10]={记录月份食品消费房租费用子女费用水电费用医疗费用储蓄费用本月收入};for;i8;i++px[i].no=i;px
[0].data=a-month;px
[1].data=a-spxf;px
[2].data=a-f__y;px
[3].data=a-znjy;px
[4].data=a-sdfy;px
[5].data=a-ylfy;px
[6].data=a-cxfy;px
[7].data=a-srfy;fori=1;i8;i++{flag=0;forj=0;j8-i;j++ifpx[j].datapx[j+1].data{t=px[j].data;px[j].data=px[j+1].data;px[j+1].data=t;t=px[j].no;px[j].no=px[j+1].no;px[j+1].no=t;flag=1;}ifflag==0break;}printf\n;fori=0;i8;i++{printf%sstr[px[i].no];}printf\n-----------------------------------------------------------------------\n;fori=0;i8;i++{printf%8dpx[i].data;}printf\n;}voidmodifyInfor*aintmon{FILE*fp1*fp2;Infor*b;b=Infor*__llocsizeofInfor;fp1=fopenFilePath1rt;fp2=fopentemp.datwt+;rewindfp1;freadbsizeofInfor1fp1;while!feoffp1{ifb-month==mon{fwriteasizeofInfor1fp2;}else{fwritebsizeofInfor1fp2;}freadbsizeofInfor1fp1;}fclosefp1;fclosefp2;removeFilePath1;//删除源文件renametemp.datFilePath1;//重命名中间文件printf修改数据成功!\n;changeFor__t;}voiddelRecordintmon{FILE*fp1*fp2;Infor*b;b=Infor*__llocsizeofInfor;fp1=fopenFilePath1rt;fp2=fopentemp.datwt+;rewindfp1;freadbsizeofInfor1fp1;while!feoffp1{ifb-month!=monfwritebsizeofInfor1fp2;freadbsizeofInfor1fp1;}fclosefp1;fclosefp2;removeFilePath1;//删除源文件renametemp.datFilePath1;//重命名中间文件printf删除数据成功!\n;changeFor__t;附录一编程规范随着软件产品的功能增加和版本的提高,代码越来越复杂,源文件也越来越多,对于软件__人员来说,除了保证程序运行的正确性和提高代码的运行效率之外,规范风格的编码会对软件的升级、修改、维护带来极大的方便性,也保证程序员不会陷入“代码泥潭”中无法自拔__一个成熟的软件产品,除了有详细丰富的__文档之外,必须在编写代码的时候就有条不紊,细致严谨以下的编码规范包含了程序排版、注释、命名、可读性、变量、程序效率、质量保证、代码编译、等注意事项
一、排版
1.关键词和操作符之间加适当的空格
2.相对__的程序块与块之间加空行
3.较长的语句、表达式等要分成多行书写
4.划分出的新行要进行适应的缩进,使排版整齐,语句可读
5.长表达式要在低优先级操作符处划分新行,操作符放在新行之首
6.循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分
7.若函数或过程中的参数较长,则要进行适当的划分
8.不允许把多个短语句写在一行中,即一行只写一条语句
9.函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格
10.C/C++语言是用大括号‘{’和‘}’界定一段程序块的,编写程序块时‘{’和‘}’各独占一行并且位于同一列,同时与引用它们的语句左对齐在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式
二、注释
1.注释要简单明了
2.边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性
3.在必要的地方注释,注释量要适中注释的内容要清楚、明了,含义准确,防止注释二义性保持注释与其描述的代码相邻,即注释的就近原则
4.对代码的注释应放在其上方相邻位置,不可放在下面
5.对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释应放在此域的右方;同一结构中不同域的注释要对齐
6.变量、常量的注释应放在其上方相邻位置或右方
7.全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意事项等的说明
8.在每个源文件的头部要有必要的注释信息,包括文件名;版本号;__;生成日期;模块功能描述(如功能、主要算法、内部各部分之间的关系、该文件与其它文件关系等);主要函数或过程清单及本文件历史修改记录等
9.在每个函数或过程的前面要有必要的注释信息,包括函数或过程名称;功能描述;输入、输出及返回值说明;调用关系及被调用关系说明等
三、命名
1.较短的单词可通过去掉“元音”形成缩写;
2.较长的单词可取单词的头几发符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级
3.使用匈牙利表示法
四、可读性
1.避免使用不易理解的数字,用有意义的标识来替代
2.不要使用难懂的技巧性很高的语句
3.源程序中关系较为紧密的代码应尽可能相邻
五、变量
1.去掉没必要的公共变量
2.构造仅有一个模块或函数可以修改、创建,而其余有关模块或函数只访问的公共变量,防止多个不同模块或函数都可以修改、创建同一公共变量的现象
3.仔细定义并明确公共变量的含义、作用、取值范围及公共变量间的关系
4.明确公共变量与操作此公共变量的函数或过程的关系,如访问、修改及创建等
5.当向公共变量传递数据时,要十分小心,防止赋与不合理的值或越界等现象发生
6.防止局部变量与公共变量同名
7.仔细设计结构中元素的布局与排列顺序,使结构容易理解、节省占用空间,并减少引起误用现象
8.结构的设计要尽量考虑向前兼容和以后的版本升级,并为某些未来可能的应用保留余地(如预留一些空间等)
9.留心具体语言及编译器处理不同数据类型的原则及有关细节
10.严禁使用未经初始化的变量声明变量的同时对变量进行初始化
11.编程时,要注意数据类型的强制转换
六、函数、过程
1.函数的规模尽量限制在200行以内
2.一个函数最好仅完成一件功能
3.为简单功能编写函数
4.函数的功能应该是可以预测的,也就是只要输入数据相同就应产生同样的输出
5.尽量不要编写依赖于其他函数内部实现的函数
6.避免设计多参数函数,不使用的参数从接口中去掉
7.用注释详细说明每个参数的作用、取值范围及参数间的关系
8.检查函数所有参数输入的有效性
9.检查函数所有非参数输入的有效性,如数据文件、公共变量等
10.函数名应准确描述函数的功能
11.避免使用无意义或含义不清的动词为函数命名
12.函数的返回值要清楚、明了,让使用者不容易忽视错误情况
13.明确函数功能,精确(而不是近似)地实现函数设计
14.减少函数本身或函数间的递归调用
七、可测性
1.在编写代码之前,应预先设计好程序调试与测试的方法和手段,并设计好各种调测开关及相应测试代码如打印函数等
2.在进行集成测试/系统联调之前,要构造好测试环境、测试项目及测试用例,同时仔细分析并优化测试用例,以提高测试效率
八、程序效率
1.编程时要经常注意代码的效率
2.在保证软件系统的正确性、稳定性、可读性及可测性的前提下,提高代码效率
3.不能一味地追求代码效率,而对软件的正确性、稳定性、可读性及可测性造成影响
4.编程时,要随时留心代码效率;优化代码时,要考虑周全
5.要仔细地构造或直接用汇编编写调用频繁或性能要求极高的函数
6.通过对系统数据结构划分与组织的改进,以及对程序算法的优化来提高空间效率
7.在多重循环中,应将最忙的循环放在最内层
8.尽量减少循环嵌套层次
9.避免循环体内含判断语句,应将循环语句置于判断语句的代码块之中
10.尽量用乘法或其它方法代替除法,特别是浮点运算中的除法
九、质量保证
1.在软件设计过程中构筑软件质量代码质量保证优先原则
(1)正确性,指程序要实现设计要求的功能
(2)稳定性、安全性,指程序稳定、可靠、安全
(3)可测试性,指程序要具有良好的可测试性
(4)规范/可读性,指程序书写风格、命名规则等要符合规范
(5)全局效率,指软件系统的整体效率
(6)局部效率,指某个模块/子模块/函数的本身效率
(7)个人表达方式/个人方便性,指个人编程习惯
2.只引用属于自己的存贮空间
3.防止引用已经释放的内存空间
4.过程/函数中分配的内存,在过程/函数退出之前要释放
5.过程/函数中申请的(为打开文件而使用的)文件句柄,在过程/函数退出前要关闭
6.防止内存操作越界
7.时刻注意表达式是否会上溢、下溢
8.认真处理程序所能遇到的各种出错情况
9.系统运行之初,要初始化有关变量及运行环境,防止未经初始化的变量被引用
10.系统运行之初,要对加载到系统中的数据进行一致性检查
11.严禁随意更改其它模块或系统的有关设置和配置
12.不能随意改变与其它模块的接口
13.充分了解系统的接口之后,再使用系统提供的功能
14.要时刻注意易混淆的操作符当编完程序后,应从头至尾检查一遍这些操作符
15.不使用与硬件或操作系统关系很大的语句,而使用建议的标准语句
16.建议使用第三方提供的软件__工具包或控件时,要注意以下几点
(1)充分了解应用接口、使用环境及使用时注意事项
(2)不能过分相信其正确性
(3)除非必要,不要使用不熟悉的第三方工具包与控件
十、代码编译编写代码时要注意随时保存,并定期备份,防止由于断电、硬盘损坏等原因造成代码丢失。