数据结构与算法课程设计指导书_第1页
数据结构与算法课程设计指导书_第2页
数据结构与算法课程设计指导书_第3页
数据结构与算法课程设计指导书_第4页
数据结构与算法课程设计指导书_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 数据结构与算法 课程设计指导书 0 / 27一目的通过本课程设计,使同学更加系统地理解和掌握数据结构的基本概念; 能自如地根据实际要求,设计相应的数据结构,并运用C或C+语言实现所设计的算法,能够利用所学的基本知识和技能,分析和解决简单的程序设计问题 ,为后续其它专业课程的学习和应用打下良好基础。二题目根据指导教师的具体要求,从下面题目中选择1个来完成1 学生成绩管理系统2 简易客房管理系统3 人事档案管理系统4 进销存货物管理系统5 图书管理系统6 运动会分数统计7 民航订票系统8 校园导游咨询9 大数相乘问题10 长整数的加减法11 表达式的求值12 日历系统13 钱币的转换14 二叉树

2、的应用哈夫曼树15 银行排队系统模拟16 其他题目(需老师同意)注意,在实现相关管理系统题目时,需要设计良好的数据结构,代码编写时不允许运用现有的数据库管理系统,具体功能应通过对文件的读写操作实现。三任务完成形式1 完整的软件系统 最终必须向指导老师提交完整的程序源代码(.c和.cpp以及.h为后缀的文件)、数据文件以及使用说明文件等。源代码文件要特别注意编程规范、代码风格,关键代码需有合理的注释,不含任何无用代码;数据文件内要求有一定数量的“真实”数据(如对于记录文件,需要有5条以上记录); 使用说明文件的第一行,需要给出设计者的学号、姓名,后面为其它说明。2 课程设计报告(详细要求请参考附

3、录二)课程设计报告总体上主要包括以下几个部分:1)封面2)目录1 / 273)课程设计报告正文4)使用说明5)参考文献四总体要求1 每道题目的程序代码总量不少于600行(其中不包括自动生成代码),有合理注释。2 课程设计报告正文字数不少于8000字,概念清楚、叙述正确、内容完整、书写规范。3 独立完成课程设计,不得抄袭他人。4 功能正确、有一定实用性。5 尽可能大量使用各种C或者C+语言程序设计技术,尤其在以下几个方面:指针及其运算、结构、指针数组、数组指针、字符数组与字符串、内存空间动态申请与释放、文件访问与操作、合理的常量与全局变量及函数接口变量定义、数据输入与数据格式检查、数据类型转换、

4、错误处理、工程设计技术(整个系统由一个工程文件、若干个程序文件、若干头文件、甚至库文件等组成)。程序界面不做较高要求,但要考虑到用户使用的方便,有较好的交互界面。6 可以使用VC编译环境开发程序,但不允许使用现成的数据库如access,SQL Server等完成上面的课程设计题目,否则成绩评定为不及格。7 设计时适当考虑程序的可维护性与可扩充性。8 提倡积极交流与讨论(同学间、bbs站点)、善于查阅资料、分析与借鉴他人编写的软件。9 认真自觉以个人为单位完成自己的任务,代码和课设报告均严禁雷同,否则成绩为不及格。验收时查看代码,并提出若干个跟程序代码有关的问题,并把问题回答情况计入总评成绩。

5、10、根据不同的数据结构,要求有一种数据结构算法(冒泡排序算法不包括)。五工作阶段与考核方法大体上可分成五个阶段: 1资料查阅准备阶段(15%)2分析设计阶段(35%)3编程调试阶段(40%)4课程设计报告书写阶段(10%)5验收阶段 考核方法: 只有程序验收通过后,才能按以下方法核定本次课程设计的总成绩,因未能独立完成设计(尤其是抄袭)或概念不清的同学,总成绩将核定为不及格。总成绩由以下几个部分决定:1 考勤、纪律、实验室卫生2 工作量(代码量、功能多少、难度)3 关键技术4 实用性、创新5 代码书写规范性6 程序界面、新技术引用7 课程设计报告(叙述、书写规范、字数)8 动手能力、分析问题

6、解决问题能力 2 / 27六任务具体要求1、学生成绩管理系统问题描述:该系统实现对若干个大学生的学习成绩进行管理。至少包括以下信息:学号、姓名、科目、成绩,学期。学期取值范围可为1-8。功能要求:1使用中文菜单,界面设计和用户输入输出要人性化些;2. 将学生信息保存在文本文档中,具体对学生信息进行插入删除查询操作时,将保存在文本文档中的学生信息提取出来,保存在自己定义的数据结构中,然后再对该数据结构进行操作,所有操作完成,或者在相应的命令后,再将学生信息保存到文本文档中。3具有数据输入功能,输入的数据能最终保存在文件中;4具有数据删除功能,能最终从文件中删除;5排序功能,根据自己设计的数据结构

7、,设计排序算法6具有多种查询(如按学号查询、按姓名查询、按成绩查询等)及输出功能;7其它功能(如各种统计,统计每个学生所有课程的平均分,统计某门课程所有学生的平均分等等)8学生信息的修改(比如修改学生姓名,修改学生某门课程的成绩)说明:(1)功能各方面越完善越好(2)自定义的数据结构可以使用数组,链表,树等,可以使用多种数据结构来存放数据,然后在其上使用不同的排序算法。(3)若用数组,必须动态分配空间(文本文件中最好有一行表示学生人数)算法要点:把问题看成是对线性表的操作。将学生成绩组织成顺序表,则登记学生成绩即是建立顺序表操作;查询学生成绩、插入学生成绩、删除学生成绩即是在顺序表中进行查找、

8、插入和删除操作。2、简易客房管理系统问题描述:该系统能简单实现对客栈的住宿情况进行管理。至少包括以下信息:房号、房型、单价(每床)、已住人数;住客姓名、性别、年龄、身份、身份证号码,房号,床号,入住日期、入住时间、离店日期、离店时间。这些信息应存放在两个文件中,分别是客房信息文件、住客信息文件。“房型”可取值1-3,分别表示单人间、双人间、通铺(可以住很多人的房间)功能要求:1具有建立数据文件(客房信息文件、住客信息文件)功能;2具有数据输入功能;3具有数据修改功能;4具有数据删除功能;5能查询(查找)一些基本信息(如按房号查询、按姓名查询、空余客房查询等);6具有多种统计功能(要求有一定的实

9、用性)3 / 27(如某客房当前有那些空床、某住客应付多少费用、某天住店总人数和总收入等)7能具有排序功能(比如在查询所有的客房信息时,能根据房间价格进行排序,方便客人挑选房间等等)说明:(1)功能各方面越完善越好(2)自定义的数据结构可以使用数组,链表,树等,可以使用多种数据结构来存放数据,然后在其上使用不同的排序算法。(3)若用数组,必须动态分配空间(文本文件中最好有一行来表示数组应该有多大,这样便于动态分配空间)3、人事档案管理系统问题描述:该系统能简单实现对人事档案的管理。该系统包括: 人员基本情况管理、工资管理和考勤管理等几个方面的功能。用户通过输入工资、考勤、职工履历等基本信息,由

10、系统自行生成相应的统计数据以供用户查询, 能对这些基本信息进行更新和删除。至少包括以下信息:人员履历表:员工编号,员工姓名,性别,年龄,部门,职位,受教育年限职工工资表:员工编号,基本工资,缺勤扣发工资,扣税,实发工资月考勤登记表:员工编号,月缺勤天数注:假设每个员工每天缺勤扣发工资的多少跟其基本工资存在一定关系,比如是该基本工资的20分之一;假设扣税金额(基本工资缺勤扣发工资2000)10,而若基本工资缺勤扣发工资2000的值小于2000则扣税金额为0功能要求:1具有建立数据文件(人员履历表文件、职工工资表文件、月考勤登记表)功能;2具有数据输入功能;3具有数据修改功能;4具有数据删除功能;

11、5能查询(查找)一些基本信息(如按员工编号查询、按员工姓名和部门组合查询等,如生成各部门员工花名册);6具有多种统计功能(要求有一定的实用性)(如不同部门的员工平均工资比较(除了用数字表示外,也可以用星号画图的方式来直观的表示);不同性别员工工资比较;某部门内部,不同职位员工工资比较;不同受教育水平人的平均工资比较;部门最高实发工资等等)7具有排序功能(比如将各部门职工工资平均值进行排序,将部门内部职工工资进行排序等等)各个功能模块简要叙述(具体实现时,并不局限于这些功能,越完善越好) 人员基本情况管理:提供对”人员履历表”数据输入、组合条件查询、统计功能; 职工工资管理:提供对”职工工资表”

12、数据的输入、查询、按统计、显示功能,完成每月对“职工工资表”数据的月统计,以此生成“职工工资总额构成情况表”实现该表的查询、显示功能。 职工考勤管理: 提供对各部门“月考勤登记表”数据的录入、查询、统计功能; 说明:(1)功能各方面越完善越好4 / 27(2)自定义的数据结构可以使用数组,链表,树等,可以使用多种数据结构来存放数据,然后在其上使用不同的排序算法。(3)若用数组,必须动态分配空间(文本文件中最好有一行来表示数组应该有多大,这样便于动态分配空间)4、进销存货物管理系统问题描述:该系统能进行简单的货物管理,进货,销售货物,退货等管理至少包括如下信息:货物标号,货物名称,货物产地,入库

13、价格,入库时间,现存货物数量,已经销售数量,销售平均单价注:每次销售后,都需要对现存货物数量进行更新,对已销售数量进行更新,也需要对销售平均单价进行更新功能要求:1具有建立数据文件(货物管理表)的功能;2具有数据输入功能;3具有数据修改功能;4具有数据删除功能(当一些已经过时陈旧的商品被特价处理后,将其删除,不再进货);5能查询(查找)一些基本信息(如能查询剩余件数小于某个特定值的商品,以便于及时进货);6具有多种统计功能(要求有一定的实用性)(如统计每种货物是否有盈利(将销售平均单价跟入库价格进行比较),所有货物的盈利或亏损等等)7具有排序功能(比如对货物盈利水平进行排序比较等等) 说明:(

14、1)功能各方面越完善越好(2)自定义的数据结构可以使用数组,链表,树等,可以使用多种数据结构来存放数据,然后在其上使用不同的排序算法。(3)若用数组,必须动态分配空间(文本文件中最好有一行来表示数组应该有多大,这样便于动态分配空间)5、图书管理系统问题描述:该系统能进行简单的图书管理功能至少包括如下信息:图书编号,图书名称,作者,出版社,总共册数,在馆册数,现存地址,借阅次数注:现存地址是假设图书馆有多个书库,不同种类的书存放于不同的地方功能要求:1具有建立数据文件(图书信息)的功能;2具有数据输入功能;3具有数据修改功能(借书或者还书都需要修改图书数量信息);5 / 274具有数据删除功能(

15、当图书因为年代久远,或者遗失,也许需要对其进行删除操作);5能查询(查找)一些基本信息(这里的查询功能应该较为强大,能通过作者进行查询,书名查询,或者结合作者出版社一起进行查询等等)6具有多种统计功能(要求有一定的实用性)(如统计每本书的借阅次数,方便将来新近图书。统计每个书库中图书的数量等等)7具有排序功能(比如对每本图书的借阅次数进行排序) 各个功能模块简要叙述(具体实现时,并不局限于这些功能,越完善越好) 新近图书:在图书信息表中添加相应信息; 旧书处理:在图书信息表中删除相应信息; 借书还书: 对图书信息表进行修改,若在馆册书为0,则不允许继续借阅; 图书信息的统计 图书信息的排序 图

16、书信息的查找 说明:(1)功能各方面越完善越好(2)自定义的数据结构可以使用数组,链表,树等,可以使用多种数据结构来存放数据,然后在其上使用不同的排序算法。(3)若用数组,必须动态分配空间(文本文件中最好有一行来表示数组应该有多大,这样便于动态分配空间)6、运动会分数统计问题描述:参加运动会有n个学校,学校编号为1n.比赛分成m个男子项目,和w个女子项目.项目编号为男子1.m,女子m+1.m+w.不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由同学自己设定。(m=20,n=20)功能要求:1.可以输入各个项目的前三

17、名或前五名的成绩;2.能统计各学校总分;3.可以按学校编号、学校总分、男女团体总分排序输出;4.可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)输出形式:有中文提示,各学校分数为整形界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。 6 / 277、民航订票系统任务:通过此系统可以实现如下功能:1录入可以录入航班情况(数据可以存储在一个数据文件中,数据结构、

18、具体数据自定)2查询可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况,最近一天航班的日期和余票额.;3订票业务;据顾客要求(航班号,订票额)查询该航班票额情况,若有余票,办理售票手续,输出座位号;若已满员或票额不足,则另询顾客要求.若需要,可预约登记排队等候. 4退票业务:根据顾客情况(日期,航班)为顾客办理退票手续,然后查询该航班是否有人预约登记,首先询问排在第一位的顾客,若退票额能满足他的要求,则为他办理退票手续,否则依次询问其他排队预约的顾客.5修改航班信息:当航班信息改变可以修改航班数据文

19、件。基本要求:1根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;2界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。8、校园导游咨询 问题描述:设计校园导游程序,为来访的客人提供服务。 基本要求: (1)假设有一所校园的平面图,所含景点不小于10个,请选择适当的坐标来表示出该图上的各个景点。; (2)为来访的客人提供从当前位置到其他景点的最短路径的咨询; (3)必须具有校园平面图的修改和扩充功能(即某些景点坐标的修改和景点个数的增加)。9、大数相乘问题 例如:输入第一个数为:13286754398172586,输入第二个数为:23975674

20、53241147则程序运行后输出13286754398172586*2397567453241147=正确答案。10、长整数的加减运算 问题描述:设计一个实现任意长的整数进行加法运算的演示程序基本要求:利用双向循环链表实现长整数的存储,每个结点含一个整型变量。任何整型变量的范围是(2151)(2151)。输入输出形式:按照中国对于长整数的表示习惯,每四位是一组,组间用逗号隔开更高要求:7 / 27(1)长整数的减法(2)多个长整数的连续加减法,并带括号等。具体方式可以参见表达式的求值部分,利用栈测试数据:(1)0;0;应输出“0”(2)2345,6789;7654,3211;应输出“1,000

21、0,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)每个结点中可以存放的最大整数为215132767,才能保证两数相加不会溢出。但若这样存,即相当于按32768进制数存,在十进制数与32768进制数

22、之间的转换十分不方便。故可以在每个结点中仅存十进制数的4位,即不超过9999的非负整数。整个链表是为万进制数。(2)可以利用头结点数据域的符号代表长整数的符号。用其绝对值表示元素结点数目。相加过程中不要破坏两个操作数链表。两操作数的头指针存于指针数组中是简化程序结构的一种方法。不能给长整数位数规定上限。11、表达式的求值 表达式求值要求: 例如,输入25*(12-27/3)+2*5= 则程序运行后输出25*(12-27/3)+2*5=85设计要求:以字符序列的形式从终端输入不含变量的算术表达式(整数和实数都要考虑),利用给定的算符优先关系,实现对算术四则混合运算表达式的求值, 基本要求: (1

23、)输入四则表达式(有括号和加减乘除,且表达式中有可能会出现带小数点的浮点数); (2)判断表达式是否合法(括号是否匹配); (3)按照运算符的优先级计算算术表达式的值。更高要求:(1)演示在求值过程中运算符栈、操作数栈的变化过程。(2)判断表达式的语法是否正确(比如12就是错误的)12、日历系统功能要求 : 1)输入任一年将显示出该年的所有月份日期,对应的星期2)注意闰年情况其显示格式要求如下:1)月份:中文英文都可以,2)下一行显示星期,从周日到周六,中英文都可以3)下一行开始显示日期从1号开始,并按其是周几实际情况与上面的星期数垂直对齐8 / 27当输入2004显示如下:输入要显示日历的年

24、份:2004输入该年1月1日是星期几:4输出日历如下:The calendar of the year 2004. Januray 1 February 2 Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat 1 2 3 1 2 3 4 5 6 7 4 5 6 7 8 9 10 8 9 10 11 12 13 14 11 12 13 14 15 16 17 15 16 17 18 19 20 21 18 19 20 21 22 23 24 22 23 24 25 26 27 28 25 26 27 28 29 30 31 29 = =

25、 March 3 April 4 Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 1 2 3 7 8 9 10 11 12 13 4 5 6 7 8 9 10 14 15 16 17 18 19 20 11 12 13 14 15 16 17 21 22 23 24 25 26 27 18 19 20 21 22 23 24 28 29 30 31 25 26 27 28 29 30 = =13、钱币的转换银行经常需要进行输入输出大小写的转换。要求:(1) 编写程序实现将阿拉伯数字表示的钱币数,表示为用中文

26、表示的钱币书:比如输入10.2元,则输出拾元贰角三分(2) 编写程序实现将中文表示的钱币数表示为阿拉伯数字表示的钱币数:比如输入三角,则输出0.3元(3) 需要注意:100000,中文表示是拾万元;0.3元表示为三角。希望大家把具体情况都能考虑清楚。设计比较良好的用户提示界面。14、二叉树的应用哈夫曼树(电文的编码和译码)哈夫曼编码/译码器 问题描述:设计一个哈夫曼编码/译码系统,对字符串进行编码/译码 基本要求: (1)从键盘输入字符串,以回车结束; (2)根据字符串中字符出现的概率进行哈夫曼编码;) (3)并输出编码结果和编码表;(4)根据编码结果和编码表还原字符串; (5)输出编码过程中

27、构造的哈夫曼树。内容:理解二叉树的基本概念,并在读懂下面详细描述的算法的情况下,编写一个有关二叉树的简单应用程序电文的编码和译码具体实验题目和功能要求如下:9 / 27(1)电文编码:假如有一份电文中共使用5个字符:a、b、c、d、e,它们的出现频率依次为4、7、5、2、9,试画出对应的哈夫曼树(请按左子树根结点的权小于等于右子树根结点的权的次序构造),并求出每个字符的哈夫曼编码其中:得到的哈夫曼树和哈夫曼编码如下。图1要求自己编程实现若从键盘输入若干字符,同时并输入它们各自出现的频率,最后能计算并在屏幕上显示出每个字符的代码。(2)电文译码:给出一段二进制代码的电文,要求根据前面构造的huf

28、fman树进行译码。在前面编码的基础上,键盘输入一段电文,则能在屏幕上显示出自动翻译好的电文。比如根据图1显示的哈夫曼树,键盘输入电文如下:1011010,屏幕上能显示自动翻译的结果为bed说明事项:1.通过上面的描述本课程设计题目包括(1)电文的编码(2)电文的译码,要求必须用哈夫曼树实现。2. 界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。并要明确,只有在使用哈夫曼树进行编码的前提下,才有可能进行译码。3.考虑将此程序设计完善,比如可以将编码后的字符代码保存到文件中,将需要翻译的代码保存到另一个文件中,最后把自动翻译后的结果也保存到文本文档中等等。在这个程

29、序中,首先要构造一棵哈夫曼树,然后才能根据这棵哈夫曼树构造编码。因此,步骤一:构造哈夫曼树步骤二:根据哈夫曼树为每个字符编码步骤三:根据步骤二中构造好的哈夫曼树进行译码提示:具体算法见后面的有关哈夫曼树的基础知识介绍部分代码(仅供参考)如下:const int N=5;/叶子结点数目const int TREENODENUM=2*N-1;/结点总数/huffman树结点的结构typedef char dataType;typedef structfloat weight;dataType data;10 / 27int lchild,rchild,parent;huffmanTreeNode;

30、/哈夫曼编码的结构typedef struct char bitsN;/详细的编码,不过是反的,要从cnt开始读int cnt;/记录这个字符数由几位bit表示的dataType data;/编码要表示的字母codeType;有关哈夫曼树的基础知识介绍(1)哈夫曼树的定义哈夫曼树:设有个权值,构造一棵有个叶子结点的二叉树,每个叶子结点的权值为,则最小的二叉树叫哈夫曼树其中:为权值为结点到根到路径长度为叶子结点数(2)构造Huffman树的方法Huffman算法构造Huffman树步骤如下:根据给定的n个权值w1,w2,wn,构造n棵只有根结点的二叉树,令其权值为wj在森林中选取两棵根结点权值最

31、小的树作左右子树,构造一棵新的二叉树,置新二叉树根结点权值为其左右子树根结点权值之和在森林中删除这两棵树,同时将新得到的二叉树加入森林中重复上述两步,直到只含一棵树为止,这棵树即哈夫曼树例如:第一步:n棵只有根结点的二叉树,每个结点有相应代表的符号和权值第二步:从中挑出权值最小的合并生成一棵新的树,置新生成的二叉树的根结点第三步:不断重复第二步,直到只有一个根结点11 / 27第四步:最后完成一棵huffman树哈夫曼树结点的存储结构(3)哈夫曼树应用(哈夫曼编码)哈夫曼树中没有度为1的结点,称为严格的二叉树。哈夫曼编码:数据通信用的二进制编码思想:根据字符出现频率编码,使电文总长最短编码:根

32、据字符出现频率构造哈夫曼树,然后将树中结点引向其左孩子的分支标“0”,引向其右孩子的分支标“1”;每个字符的编码即为从根到每个叶子到路径上得到到0、1序列例如:要传输到字符集DC,A,S,T,;字符出现频率w2,4,2,3,3得到的哈夫曼树和哈夫曼编码为(4)Huffman编码算法的基本思想从叶子treei出发,利用双亲地址找到双亲结点treep,再利用treep的lchild和rchild指针域判断treei是treep的左孩子还是右孩子,然后决定分配代码是“0”还是“1”,然后以treep为出发点继续向上回溯,直到根结点为止12 / 27(5)Huffman译码算法的基本思想从Huffma

33、n树根开始,从待译码电文中逐位取码。若编码是“0”,则向左走;若编码是“1”,则向右走,一旦到达叶子结点,则译出一个字符;再重新从根出发,直到电文结束15、银行排队系统模拟假设某银行有n个窗口对外接待客户,从早晨银行9点开门起到5点关门,不断有客户进入银行,由于每个窗口在某个时刻只能接待一个客户。因此在客户人数众多时需要在每个窗口前顺次排队,对于刚进银行的客户。如果某个窗口的业务员正空闲,则可上前输业务。反之,若个窗口均有客户所占,他便会排在为数最少的队伍后面。编制一个程序模拟银行的这种业务活动并计算一天中客户在银行的平均逗留时间。(提示:参考c+ primer plus中相关章节或者软件工程

34、专业课表中的飞机场模拟)例子(参考)(C版) 题目: 个人帐簿管理系统设计功能: 个人帐簿管理系统记录某人每月的全部收入及各项开支情况,包括食品消费,房租,子女教育费用,水电费,医疗费,储蓄等。进入系统后可以输入和修改某月的收支情况,可以对每月的开支从小到大进行排序,可以根据输入的月份查询每月的收支情况。1 初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;2 完成最低要求:建立一个文件,包括某人5个月的收支情况,能对文件中的信息进行扩充(追加),修改和删除;3 进一步要求:完成对每月的开支排序,以及完成系统查询功能。有兴趣的同学可以自己扩充系统功能。要求:1)界面友好,函数功能要

35、划分好2)总体设计和流程图3)程序要加必要的注释4)要提供程序测试方案5) 程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。代码如下:#include #include #include #include /文件保存路径 #define FilePath1 Myinfor.dat #define FilePath2 Myinfor.txt13 / 27 /查询用声明 #define Status int #define OK 1 #define Error 0 #define NotFound 2 typedef struct int month;/月份 in

36、t spxf;/食品消费 int fzfy;/房租费用 int znjy;/子女教育费用 int sdfy;/水电费用 int ylfy;/医疗费用 int cxfy;/储蓄费用 int srfy;/收入费用 Infor; typedef struct / 查询用自定义数据类型 int no; int data; pType; void menu(void); /菜单 void input(Infor *newI); /接收键盘输入 void writeinfor(Infor *newI);/向文件内写入内容 void changeFormat(void );/将dat格式文件转换为txt文件

37、 Status search(Infor *a);/查询函数返回查询的结果及查询的状态 void paixu(Infor *a);/对查询据结果排序 void modify(Infor *a,int mon);/修改数据 void delRecord(int mon);/删除数据 void main() while(1) menu(); void menu(void) int item; int mon; Infor *a;14 / 27 a=(Infor *)malloc(sizeof(Infor); do printf(n个人帐簿管理系统设计【*制作】nn); printf(tt1.录 入

38、 数 据。n); printf(tt2.查 看 数 据。n); printf(tt3.修 改 数 据。n); printf(tt4.查 询 数 据。n); printf(tt5.排 序 数 据。n); printf(tt6.删 除 数 据。n); printf(tt0.退 出 系 统。nn); printf(请输入要进行的操作: ); scanf(%d,&item); while(item6 | itemmonth; if (item!=OK) printf(n没有符合条件的记录!n); else printf(n记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入

39、n); printf(- n); printf(%7d %8d %8d %8d %8d %8d %8d %8dn,a-month,a-spxf,a-fzfy,a-znjy,a-sdfy,a-ylfy,a-cxfy,a-srfy); input(a);15 / 27 modify(a,mon); break; /查询数据 case 4: item=search(a); if (item!=OK) printf(n没有符合条件的记录!n); else printf(n记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 n); printf(- n); printf(%7

40、d %8d %8d %8d %8d %8d %8d %8dn,a-month,a-spxf,a-fzfy,a-znjy,a-sdfy,a-ylfy,a-cxfy,a-srfy); break; /排序数据 case 5: item=search(a); if (item!=OK) printf(n没有符合条件的记录!n); else paixu(a); break; /删除数据 case 6: item=search(a); mon=a-month; if (item!=OK) printf(n没有符合条件的记录!n); else printf(n记录月份 食品消费 房租费用 子女费用 水电费

41、用 医疗费用 储蓄费用 本月收入 n); printf(- n); printf(%7d %8d %8d %8d %8d %8d %8d %8dn,a-month,a-spxf,a-fzfy,a-znjy,a-sdfy,a-ylfy,a-cxfy,a-srfy); delRecord(mon); break; free(a);/释放内存空间16 / 27 void input(Infor *newI) printf(n请依次输入数据说明:中间以空格符隔开:n(本月月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 收入费用)n); scanf(%d%d%d%d%d%d%d%d,&

42、newI-month,&newI-spxf,&newI-fzfy,&newI-znjy,&newI-sdfy,&newI-ylfy,&newI-cxfy,&newI-srfy); fflush(stdin); void writeinfor(Infor *newI) FILE *fp; fp=fopen(FilePath1,ab+); if(fp=NULL) printf(无法创建文件:%s,FilePath1); exit(0); fwrite(newI,sizeof(Infor),1,fp);/这里可以做特别处理可防止存在同一月份有2条以上的记录问题。这里就不写了。 fclose(fp);

43、 printf(数据录入成功!n); void changeFormat(void) /暂时只能操作一行文件有待改进 FILE *fp1,*fp2; Infor *a; a=(Infor *)malloc(sizeof(Infor); fp1=fopen(FilePath1,rb+); if(fp1=NULL) printf(无法找到文件:%sn,FilePath1); return ; /返回主函数 fp2=fopen(FilePath2,wt+); if(fp2=NULL) printf(无法创建文件:%sn,FilePath2); return ; /返回主函数 17 / 27 fputs( n个人帐簿管理系统nn,fp2); fputs(记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 n,fp2); fputs(- n,fp2); printf(n记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 n); printf(- n); rewind(fp1); fread(a,s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论