个人帐簿管理系统设计[数据结构课程设计]
2008-10-03 17:46
726 查看
数据结构课程设计任务书11
题目:个人帐簿管理系统设计
功能: 个人帐簿管理系统记录某人每月的全部收入及各项开支情况,包括食品消费,房租,子女教育费用,水电费,医疗费,储蓄等。进入系统后可以输入和修改某月的收支情况,可以对每月的开支从小到大进行排序,可以根据输入的月份查询每月的收支情况。
分步实施:
1. 初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2. 完成最低要求:建立一个文件,包括某人5个月的收支情况,能对文件中的信息进行扩充(追加),修改和删除;
3. 进一步要求:完成对每月的开支排序,以及完成系统查询功能。有兴趣的同学可以自己扩充系统功能。
要求:1)界面友好,函数功能要划分好
2)总体设计应画一流程图
3)程序要加必要的注释
4)要提供程序测试方案
5) 程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。
我的源代码如下:
题目:个人帐簿管理系统设计
功能: 个人帐簿管理系统记录某人每月的全部收入及各项开支情况,包括食品消费,房租,子女教育费用,水电费,医疗费,储蓄等。进入系统后可以输入和修改某月的收支情况,可以对每月的开支从小到大进行排序,可以根据输入的月份查询每月的收支情况。
分步实施:
1. 初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2. 完成最低要求:建立一个文件,包括某人5个月的收支情况,能对文件中的信息进行扩充(追加),修改和删除;
3. 进一步要求:完成对每月的开支排序,以及完成系统查询功能。有兴趣的同学可以自己扩充系统功能。
要求:1)界面友好,函数功能要划分好
2)总体设计应画一流程图
3)程序要加必要的注释
4)要提供程序测试方案
5) 程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。
我的源代码如下:
#include <stdio.h> #include <stdlib.h> #include <memory.h> #include <windows.h> //文件保存路径 #define FilePath1 "Myinfor.dat" #define FilePath2 "Myinfor.txt" //查询用声明 #define Status int #define OK 1 #define Error 0 #define NotFound 2 typedef struct { int month;//月份 int 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文件 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; a=(Infor *)malloc(sizeof(Infor)); do{ printf("/n…………个人帐簿管理系统设计【云磊制作】…………/n/n"); printf("/t/t1.录 入 数 据。/n"); printf("/t/t2.查 看 数 据。/n"); printf("/t/t3.修 改 数 据。/n"); printf("/t/t4.查 询 数 据。/n"); printf("/t/t5.排 序 数 据。/n"); printf("/t/t6.删 除 数 据。/n"); printf("/t/t0.退 出 系 统。/n/n"); printf("请输入要进行的操作: " ); scanf("%d",&item); }while(item>6 || item<-1); switch(item) { //退出程序 case 0: getchar(); getchar(); exit(1); break; //录入数据 case 1: input(a); writeinfor(a); break; //查看数据 case 2: changeFormat(); break; //修改数据 case 3: item=search(a); mon=a->month; if (item!=OK) printf("/n没有符合条件的记录!/n"); else { printf("/n记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 /n"); printf("----------------------------------------------------------------------- /n"); printf("%7d %8d %8d %8d %8d %8d %8d %8d/n",a->month,a->spxf,a->fzfy,a->znjy,a->sdfy,a->ylfy,a->cxfy,a->srfy); input(a); modify(a,mon); } break; //查询数据 case 4: item=search(a); if (item!=OK) printf("/n没有符合条件的记录!/n"); else{ printf("/n记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 /n"); printf("----------------------------------------------------------------------- /n"); printf("%7d %8d %8d %8d %8d %8d %8d %8d/n",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记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 /n"); printf("----------------------------------------------------------------------- /n"); printf("%7d %8d %8d %8d %8d %8d %8d %8d/n",a->month,a->spxf,a->fzfy,a->znjy,a->sdfy,a->ylfy,a->cxfy,a->srfy); delRecord(mon); } break; } free(a);//释放内存空间 } void input(Infor *newI) { printf("/n请依次输入数据[说明:中间以空格符隔开]:/n(本月月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 收入费用)/n"); scanf("%d%d%d%d%d%d%d%d",&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); printf("数据录入成功!/n"); } void changeFormat(void) //暂时只能操作一行文件有待改进 { FILE *fp1,*fp2; Infor *a; a=(Infor *)malloc(sizeof(Infor)); fp1=fopen(FilePath1,"rb+"); if(fp1==NULL) { printf("无法找到文件:%s/n",FilePath1); return ; //返回主函数 } fp2=fopen(FilePath2,"wt+"); if(fp2==NULL) { printf("无法创建文件:%s/n",FilePath2); return ; //返回主函数 } fputs(" /n……………………………………个人帐簿管理系统……………………………………/n/n",fp2); fputs("记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 /n",fp2); fputs("----------------------------------------------------------------------- /n",fp2); printf("/n记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 /n"); printf("----------------------------------------------------------------------- /n"); rewind(fp1); fread(a,sizeof(Infor),1,fp1); while(!feof(fp1)) { printf("%7d %8d %8d %8d %8d %8d %8d %8d/n",a->month,a->spxf,a->fzfy,a->znjy,a->sdfy,a->ylfy,a->cxfy,a->srfy); fprintf(fp2,"%7d %8d %8d %8d %8d %8d %8d %8d/n",a->month,a->spxf,a->fzfy,a->znjy,a->sdfy,a->ylfy,a->cxfy,a->srfy); fread(a,sizeof(Infor),1,fp1); } fputs("----------------------------------------------------------------------- /n",fp2); fputs("关闭本程序继续原程序!/n",fp2); fclose(fp1); fclose(fp2); system(FilePath2); //调用打开转换的文本文件 remove(FilePath2);//删除文本文件文件 } Status search(Infor *a) { FILE *fp1; int mon; int isfound=0; printf("请正确输入要查询的月份:"); scanf("%d",&mon); fflush(stdin); fp1=fopen(FilePath1,"rb+"); if(fp1==NULL) { printf("无法找到文件:%s/n",FilePath1); return Error; //返回主函数 } rewind(fp1); fread(a,sizeof(Infor),1,fp1); while(!feof(fp1)) { if(a->month==mon) { isfound=1; break; } else { isfound=0; } fread(a,sizeof(Infor),1,fp1); } fclose(fp1); if(isfound) return OK; else return NotFound; } void paixu(Infor *a) { int i=0,j=0,flag=0,t; pType px[8]={{0,0}}; char str[8][10]={"记录月份","食品消费","房租费用","子女费用","水电费用","医疗费用","储蓄费用","本月收入"}; for(;i<8;i++) px[i].no=i; px[0].data=a->month; px[1].data=a->spxf; px[2].data=a->fzfy; 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; for(i=1;i<8;i++) { flag=0; for(j=0;j<8-i;j++) if(px[j].data>px[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; } if(flag==0) break; } printf("/n"); for(i=0;i<8;i++) { printf(" %s",str[px[i].no]); } printf("/n----------------------------------------------------------------------- /n"); for(i=0;i<8;i++) { printf("%8d ",px[i].data); } printf("/n"); } void modify(Infor *a,int mon) { FILE *fp1,*fp2; Infor *b; b=(Infor *)malloc(sizeof(Infor)); fp1=fopen(FilePath1,"rt"); fp2=fopen("temp.dat","wt+"); rewind(fp1); fread(b,sizeof(Infor),1,fp1); while (!feof(fp1)) { if(b->month==mon) { fwrite(a,sizeof(Infor),1,fp2); } else { fwrite(b,sizeof(Infor),1,fp2); } fread(b,sizeof(Infor),1,fp1); } fclose(fp1); fclose(fp2); remove(FilePath1);//删除源文件 rename("temp.dat",FilePath1);//重命名中间文件 printf("修改数据成功!/n" ); changeFormat(); } void delRecord(int mon) { FILE *fp1,*fp2; Infor *b; b=(Infor *)malloc(sizeof(Infor)); fp1=fopen(FilePath1,"rt"); fp2=fopen("temp.dat","wt+"); rewind(fp1); fread(b,sizeof(Infor),1,fp1); while (!feof(fp1)) { if(b->month!=mon) fwrite(b,sizeof(Infor),1,fp2); fread(b,sizeof(Infor),1,fp1); } fclose(fp1); fclose(fp2); remove(FilePath1);//删除源文件 rename("temp.dat",FilePath1);//重命名中间文件 printf("删除数据成功!/n" ); changeFormat(); }
相关文章推荐
- 数据结构课程设计—考试报名管理系统
- 数据结构课程设计 成绩管理系统
- 数据结构课程设计图书管理系统
- 数据结构课程设计--立体停车场管理系统(改)
- 数据结构课程设计—图书管理系统
- 数据结构课程设计——学生成绩管理系统
- 数据结构课程设计代码-家谱管理系统
- 数据结构课程设计-通讯录管理系统c++版(顺序表存储,折半查找,递增排序)
- 数据结构课程设计——考试报名管理系统
- 数据结构课程设计---学生成绩管理系统
- 数据结构课程设计--学生成绩管理系统
- 数据结构课程设计-ytu职工信息管理系统
- 数据结构课程设计论文--学生信息管理系统
- 数据结构之链表的实现-------C++课程设计-----学生选课管理系统
- 数据结构课程设计:学成成绩管理系统
- 数据结构课程设计--“模拟图书管理系统的开发”
- 数据结构课程设计-宿舍管理系统
- 数据结构课程设计—图书管理系统
- 数据结构课程设计【考试报名管理系统】