《数据结构》课程设计报告_第1页
《数据结构》课程设计报告_第2页
《数据结构》课程设计报告_第3页
《数据结构》课程设计报告_第4页
《数据结构》课程设计报告_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

1、数据结构课程设计报告设计题目:个人帐簿管理系统设计班 级 计科111 学 号2011010307 2011010115 2011010306 姓 名 张卫东 宋晓东 杨帅 指导教师 朱艳丽 起止时间 2013/10/132013/10/18 成 绩 2013 年 第二 学期一实习目的通过实习,了解并初步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、系统集成、以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。二问题描述(具体任务)根据课程设计任务书要求,个人帐簿管理系统记录某人每月的全部收入及各项开支情况,包括食品消费,房租,子女教育费用,水电

2、费,医疗费,储蓄等。进入系统后可以输入和修改某月的收支情况,可以对每月的开支从小到大进行排序,可以根据输入的月份查询每月的收支情况。另外要求建立一个文件,包括某人5个月的收支情况,能对文件中的信息进行扩充(追加),修改和删除;完成对每月的开支排序,以及完成系统查询功能。三需求分析 3.1 功能需求个人帐簿管理系统要求记录某人每月的全部收入及各项开支情况,包括食品消费,房租,子女教育费用,水电费,医疗费,储蓄等并能进行修改,查询,排序,求和,删除等功能。 3.2数据需求系统主要处理的是个人帐簿信息,因此其输入和输出都与此相关。(1) 输入数据:月份和食品消费,房租,子女教育费用,水电费,医疗费,

3、储蓄等数据。(2) 输出数据:月份和食品消费,房租,子女教育费用,水电费,医疗费,储蓄等的数据。四算法设计思想及流程图4.1系统设计方案(1) 菜单本系统根据需要主要设计了6个菜单,分别为 录 入 数 据 .查 看 数 据修 改 数 据.查 询 数 据排 序 数 据删 除 数 据求 和 数 据退 出 系 统 (2) 文件保存方式系统需要保文件,文件存储月份和食品消费,房租,子女教育费用,水电费,医疗费,储蓄等数据。(3) 数据类型系统定义了数组,结构体等类型,存储月份和食品消费,房租,子女教育费用,水电费,医疗费,储蓄等信息。(4) 算法设计系统中主要排序算法(冒泡排序),即第1个数与第2个数

4、比较,若第1个大,就与第2个数交换;若第2个数大,就不交换;继续第2个与第3个比较,。,直到比较完为止。3.2功能模块设计根据分析,系统主要设计了7个模块,分别是:录入数据模块,查看数据模块,修改数据模块,查询数据模块,排序数据模块,删除数据模块,月消费求和模块;功能模块图如图1所示。图1功能模块图(1)录入数据录入数据模块把输入的信息存储到文件里,为以下操作提供数据。(2)查看数据查看数据模块是输入要执行的操作,打开文件,查看帐户里面的信息(3)修改数据修改数据模块是输入要修改的月份,打开文件,找到该月的信息,把新输入的信息复制给原有信息,已达到修改的目的。(4)查询数据查询数据模块是打开文

5、件,输入要查看的月份,就将输出该月的信息。(5)排序数据排序数据模块是用冒泡排序,把每月的费用从小到大排列。(6)求和数据利用循环一一累加求和。 (7)删除数据删除数据模块是用链表把其中某月删除。5详细设计5.1录入数据模块录入主要通过scanf函数实现。具体程序实现流程如图2所示。 图2输入月份和食品消费,房租,子女教育费用,水电费,医疗费,储蓄等数据。5.2修改数据子模块修改文件中的信息,具体程序实现流程如图3所示。 图3输入月份首先判断文件中是否有该信息,没有,输出没有符合条件的记录,有,输出该信息,再进行修改;即重新输入月份和食品消费,房租,子女教育费用,水电费,医疗费,储蓄等数据。5

6、.3查询数据子模块查询某月的信息,具体程序实现流程如图4所示。 图4输入要查询的月份,首先判断文件中是否有该信息,没有,输出无法找到该文件,有,输出该信息。 5.4排序数据子模块排序某月的所有费用,具体程序实现流程如图5所示;图5冒泡排序:即第1个数与第2个数比较,若第1个大,就与第2个数交换;若第2个数大,就不交换;继续第2个与第3个比较,。,直到比较完为止。5.5删除数据子模块删除某月的信息,具体程序实现流程如图6所示。 图6输入要删除的月份,若文件中没有该信息,输出无法找到该文件,若文件中有该信息,输出请选择要删除的月份,输入月份,利用链表的知识删除该月份。五C语言源代码#include

7、 <stdio.h>#include <stdlib.h>#include <string.h>/文件保存路径#define FilePath1 "Myfile.dat"#define FilePath2 "Myfile.txt"/查询用声明#define Ok 1 /宏定义#define Error 0 /宏定义#define Notfind 2 /宏定义/定义个人基本信息结构体变量/c代表const费用/ele代表electricity电typedef struct int month;/定义月份int food_

8、c;/定义食品费用int rent_c;/定义房租费用int children_c;/定义子女费用int water_ele_c;/定义水电费用int hospital_c;/定义医疗费用int carring_c;/定义存储费用int income_c;/定义收入费用Infor;typedef struct/定义链接查询的结构体变量int number;int data;Type;void Show_open_picture(void); /声明显示开机画面函数void Show_personal_infomation(void); /声明个人管理系统功能提示及操作函数void Show_c

9、lose_infomation(void); /声明关闭个人管理系统函数void Input(Infor *); /声明接收按键输入的数据函数void WriteInfor(Infor *); /声明向文件内写入内容的函数void ChangeFormat(void); /声明将dat格式文件转换为txt文件int Search(Infor *); /声明查询函数(返回查询的结果及状态)void Sort(Infor *); /声明排序函数void Sum_const(Infor *); /声明消费之和函数void Modify(Infor *, int); /声明修改数据函数void Del

10、ete(int); /声明删除数据函数int main(void)/*主函数*/Show_open_picture();/*调用开机画面函数*/printf("请按Enter建进入个人管理系统->");getchar();system("cls");/*调用系统清屏函数*/while(1)Show_personal_infomation();/*调用个人管系统功能提示及操作函数*/return 0;void Show_open_picture(void)/*显示开机画面*/system("color d");printf(&qu

11、ot;<->n");printf("*tttttt*n");printf("*tt欢迎使用个人管理系统tt*n");printf("*tttttt*n");printf("<->n");printf("*tt个人管理系统设计人基本信息t*n");printf("*tt河南科技学院新科学院tt*n");printf("*tt信工系-计科111班tt*n");printf("*tt1、杨帅tttt*n");

12、printf("*tt2、宋晓东ttt*n");printf("*tt3、张卫东ttt*n");printf("<->n");printf("<->nn");void Show_close_infomation(void)/*关闭个人管理系统*/system("cls");/*调用系统清屏函数*/system("color a");printf("t请输入Enter键关闭个人管理系统ttn");getchar();printf(&q

13、uot;<->n");printf("<->n");printf("*tttttt*n");printf("*tttttt*n");printf("*tttttt*n");printf("*tt欢迎下次使用个人管理系统t*n");printf("*tttttt*n");printf("*tttttt*n");printf("*tttttt*n");printf("<->n"

14、;);printf("<->nn");exit(0);void Show_personal_infomation(void)/*个人管理系统功能提示及操作*/int mode;/定义字符型(选择的操作模式)int mon; /定义整形Infor *data;data = (Infor *)malloc(sizeof(Infor);dosystem("cls");/*调用系统清屏函数*/system("color b");printf("<->n");printf("*tttttt*

15、n");printf("*t 欢迎进入个人账簿管理系统 t*n");printf("*tttttt*n");printf("<->n");printf("<->n");printf("*t1、输入数据tt2、查看数据t*n");printf("*t3、修改数据tt4、查询数据t*n");printf("*t5、排序数据tt6、删除数据t*n");printf("*t7、求和数据tt0、退出系统t*n")

16、;printf("<->n");printf("<->nn");printf("tt请输入要进行的操作:n");scanf("%d", &mode);while(mode > 8 | mode < -1);switch(mode)case 1:/1、输入数据Input(data);/调用输入数据函数WriteInfor(data);/调用向文件内写入内容函数system("pause");/调用按任意按键输出函数system("color d

17、");break;case 2:/2、查看数据ChangeFormat();/调用查看数据函数system("pause");system("color e");break;case 3:/3、修改数据system("color 3");mode = Search(data);/复制mon = data->month;/复制if(mode != Ok) printf("n没有符合条件的记录n");elseprintf("n记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用

18、 本月收入n");/输出printf("<->n");printf("%7d %8d %8d %8d %8d %8d %8d %8dn", data->month, data->food_c, data->rent_c,data->children_c, data->water_ele_c, data->hospital_c, data->carring_c, data->income_c);Input(data);/调用输入数据函数Modify(data, mon);/调用修改数据函

19、数system("pause"); break; case 4:/4、查询数据system("color e");mode = Search(data);if(mode != Ok) printf("n没有符合条件的记录n");elseprintf("n记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 n");/输出printf("<->n");printf("%7d %8d %8d %8d %8d %8d %8d %8dn", da

20、ta->month, data->food_c, data->rent_c,data->children_c, data->water_ele_c, data->hospital_c, data->carring_c, data->income_c);system("pause"); break; case 5:/5、排序数据 system("color ff"); mode = Search(data);/复制 if(mode != Ok) printf("n没有符合条件的记录!n")

21、; /判断输出 else Sort(data); /调用排序函数system("pause"); break; case 6:/6、删除数据 system("color a"); mode = Search(data);/复制 mon = data->month; /复制 if(mode != Ok) printf("n没有符合条件的记录!n"); /判断输出 else printf("n记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 n");/输出printf("&

22、lt;->n");printf("%7d %8d %8d %8d %8d %8d %8d %8dn", data->month, data->food_c, data->rent_c,data->children_c, data->water_ele_c, data->hospital_c, data->carring_c, data->income_c);Delete(mon);/调用输入数据函数 system("pause"); break;case 7:/7、求本月消费之和 syste

23、m("color a"); mode = Search(data);/复制 if(mode != Ok) printf("n没有符合条件的记录!n"); /判断输出 else Sum_const(data); system("pause"); break;case 0:/0、退出系统getchar();/调用系统函数Show_close_infomation();/调用关机画面函数system("color c");break;free(data);/释放内存空间void Input(Infor *newI)/声明

24、接收按键输入的数据函数printf("n记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 n");/输出scanf("%7d %8d %8d %8d %8d %8d %8d %8d", &newI->month, &newI->food_c, &newI->rent_c,&newI->children_c, &newI->water_ele_c, &newI->hospital_c, &newI->carring_c, &

25、;newI->income_c); fflush(stdin);/系统函数调用(即清理标准输入流,把多余的仍未被保存的数据丢掉)void WriteInfor(Infor *new1)/声明向文件内写入内容的函数FILE *fp;/定义指针fp = fopen(FilePath1, "ab+");/打开或创建一个二进制文件,可读取或在文件的尾部添加数据if(fp = NULL)/判断文件是否为空printf("无法创建文件:%sn", FilePath1);exit(0);/从new1所指向的数据存储区获取数据,向fp所指向的文件写入数据,每次写s

26、izeof(Infor)个字节,写入1次fwrite(new1, sizeof(Infor), 1, fp);/这里可以做特别处理可防止存在同一月份有2条以上的记录问题。fclose(fp);/关闭文件,避免内存泄露printf("数据存入文件成功!n");void ChangeFormat(void)/声明将dat格式文件转换为txt文件FILE *fp1, *fp2;/定义文件指针Infor *data; /定义结构指针data = (Infor *)malloc(sizeof(Infor);/开辟空间fp1 = fopen(FilePath1, "rb+&q

27、uot;);/打开一个二进制文件,可读取或写入其中数据if(fp1 = NULL) printf("无法找到文件:%sn", FilePath2);/输出return;/返回主函数fp2 = fopen(FilePath2, "wt+");if(fp2 = NULL)printf("无法创建文件:%sn", FilePath2);return;/返回主函数fputs("n个人账簿管理系统n", fp2);fputs("记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 n&qu

28、ot;,fp2);printf("n记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 n");/输出printf("<->n");/输出rewind(fp1);/函数调用(将文件内部的位置指针重新指向一个流数据流/文件)的开头/从fp1所指向的文件读取数据,每次读取sizeof(Infor)个字节,读取1次,将读取的数据存储到data所指向的数据存储区fread(data, sizeof(Infor), 1, fp1);/feof(stream)函数有两个返回值,如果遇到文件结束,函数返回值为非零值,否则为0wh

29、ile(!feof(fp1)printf("%7d %8d %8d %8d %8d %8d %8d %8dn", data->month, data->food_c, data->rent_c,data->children_c, data->water_ele_c, data->hospital_c, data->carring_c, data->income_c);/将数据写入fp2指向的文件fprintf(fp2, "%7d %8d %8d %8d %8d %8d %8d %8dn", data->

30、;month, data->food_c, data->rent_c,data->children_c, data->water_ele_c, data->hospital_c, data->carring_c, data->income_c);fread(data, sizeof(Infor), 1, fp1);printf("<->n");fputs("关闭本程序继续原程序!n", fp2);fclose(fp1);/关闭文件fclose(fp2);/关闭文件system(FilePath2);/

31、调用打开转换的文本文件remove(FilePath2);/删除文本文件 int Search(Infor *data)/声明查询函数(返回查询的结果及状态)FILE *fp1;/定义文件指针int mon, Find = 0;/定义整形数据printf("请正确输入要查询的月份:");scanf("%d", &mon);fflush(stdin);/清楚缓冲区fp1 = fopen(FilePath1, "rb+");/打开一个二进制文件,可读取或写入其中数据if(fp1 = NULL)printf("无法找到文件

32、:%sn", FilePath1);return Error;/返回函数rewind(fp1);/调用系统函数fread(data, sizeof(Infor), 1, fp1);while(!feof(fp1)/查询操作if(data->month = mon)Find = 1;/找到返回1break; /结束操作else Find = 0;/没找到返回0fread(data, sizeof(Infor), 1, fp1);fclose(fp1);/关闭文件if(Find) return Ok;else return Error;return Notfind; void So

33、rt(Infor *dat)/声明排序函数int i = 0, j = 0;/定义整形变量Type Sort_info8 = 0;/初值赋值为0int temp;/作为中间变量char Str_info810 = "记录月份", "食品消费", "房租费用", "子女费用","水电费用", "医疗费用", "储蓄费用", "本月收入"for(i = 0; i < 8; i+)Sort_infoi.number = i;Sort_i

34、nfo0.data = dat->month;Sort_info1.data = dat->food_c;Sort_info2.data = dat->rent_c;Sort_info3.data = dat->children_c;Sort_info4.data = dat->water_ele_c;Sort_info5.data = dat->hospital_c;Sort_info6.data = dat->carring_c;Sort_info7.data = dat->income_c;for(i = 1; i < 8; i+)/

35、冒泡排序核心算法(由小到大排序)for(j = 0; j < 8 - i; j+)if(Sort_infoj.data > Sort_infoj + 1.data)/交换位置,temp作为中间变量temp = Sort_infoj.data;Sort_infoj.data = Sort_infoj + 1.data;Sort_infoj + 1.data = temp;temp = Sort_infoj.number;Sort_infoj.number = Sort_infoj + 1.number;Sort_infoj + 1.number = temp;printf("

36、;n");/输出for(i = 0; i < 8; i+)printf("%s ", Str_infoSort_infoi.number);printf("n<->n");for(i = 0; i < 8; i+)printf("%6d ", Sort_infoi.data);printf("n");void Sum_const(Infor *dat)/声明消费之和函数int i = 0, sum = 0;/定义整形变量Type Sort_info9 = 0;/初值赋值为0char

37、 Str_info910 = "记录月份", "食品消费", "房租费用", "子女费用","水电费用", "医疗费用", "储蓄费用", "本月收入", "月消费和"for(i = 0; i < 9; i+)/为结构体变量赋值Sort_infoi.number = i;Sort_info0.data = dat->month;Sort_info1.data = dat->food_c;Sort_i

38、nfo2.data = dat->rent_c;Sort_info3.data = dat->children_c;Sort_info4.data = dat->water_ele_c;Sort_info5.data = dat->hospital_c;Sort_info6.data = dat->carring_c;Sort_info7.data = dat->income_c;for(i = 0; i < 8; i+)/循环求和sum += Sort_infoi.data;Sort_info8.data = sum;printf("n&q

39、uot;);/输出for(i = 0; i < 9; i+)printf("%s ", Str_infoSort_infoi.number);printf("n<->n");for(i = 0; i < 9; i+)printf("%6d ", Sort_infoi.data);printf("n"); void Modify(Infor *data, int mon)/声明修改数据函数FILE *fp1, *fp2;/定义结构体指针Infor *dat;/定义结构体指针dat = (Inf

40、or *)malloc(sizeof(Infor);fp1 = fopen(FilePath1, "rt");/只读方式打开一个文本文件,只允许读数据fp2 = fopen("temp.dat", "wt+");/读写打开或创建一个文本文件,允许读写rewind(fp1);/函数调用(将文件内部的位置指针重新指向一个流数据流/文件)的开头/从fp1所指向的文件读取数据,每次读取sizeof(Infor)个字节,读取1,将读取的数据存储到dat所指向fread(dat, sizeof(Infor), 1, fp1);while(!feof(fp1)/重写数据if(dat->month = mon)/判断是否为要修改的月份fwrite(data, sizeof(Infor), 1, fp2);/修改数据elsefwrite(dat, sizeof(Infor), 1, fp2);fread(dat, sizeof(I

温馨提示

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

评论

0/150

提交评论