1、c语言商品管理系统文件的应用/编制于2012.11.45号/*库文件包含*/#includestdio。h/输入输出函数库includestdlib.h/常用错误控制程序库#includeconio.h/调用dos控制台i/o库#includedos。h/msdos和8086调用的一些常量和函数库includestring.h/串操作和内存操作函数库/*宏定义*/define LEN sizeof(struct commdity)#define FORMAT ”8d%15s12。1lf%-12。1lf%-12.1lf%n#define DATA commi。num,commi。name,com
2、mi.price,commi。count,commi。total/*商品结构体*/struct commdity int num; /编号 char name20;/商品名称 double price;/单价 double count;/数量 double total;/总金额 ;struct commdity comm50;/定义结构体数组/*函数申明*/void in();/录入商品信息函数void show();/显示商品信息函数void order();/按总金额排队函数void del();/删除商品信息函数void modify();/修改商品信息函数void menu();/主菜
3、单函数void insert();/插入商品信息函数void total();/统计总商品数函数void search();/查找商品信息函数void version();/版本信息/*主函数*/void main() int n; menu(); scanf(d”,&n); while(n) switch(n)/问题switch()中的数据类型是什么?答案:是常量表达式,可以是任何数据类型*/ case 1: in();/录入商品信息 break; case 2: search();/寻找商品信息 break; case 3: del(); /删除商品信息 break; case 4: mo
4、dify();/修改商品信息 break; case 5: insert();/插入商品信息 break; case 6: order();/排序商品 break; case 7: total();/统计商品 break; case 8: version();/版本信息 break; default: break; getch(); menu();/返回菜单界面 scanf(”d”,n); return ;/*被调函数体*/菜单模块void menu() system(”CLS);/清屏函数 printf(nnnnn); printf(”tt*商品管理系统*|n); printf(”tt|t
5、0 退出 n); printf(”ttt 1 追加记录 |n”); printf(”ttt 2 查找记录 n”); printf(”ttt 3 删除记录 |n”); printf(”ttt 4 修改记录 n”); printf(ttt 5 插入记录 n); printf(tt|t 6 排序记录 (按总金额) |n”); printf(”ttt 7 统计记录 n); printf(ttt 8 版本信息 n); printf(”tt*n); printf(”ttt 选择(0-8):”);/录入信息模块/基本的流程为先判断是否存在记录,/若存在则读到商品结构体中,并显示之。/ 根据用户选择在文件后面
6、追加记录void in() int i,m = 0; char ch2; FILE *fp; /以读写可追加的方式打开文件,如果不存在则新建文件 if(fp = fopen(data。txt”,”a+”)=NULL) printf(”不能打开文件!n); return; /读取文件到商品结构体数组中,直到全部读取完毕 while(!feof(fp) if(fread(&commm,LEN,1,fp)=1) m+; fclose(fp); /判断读取的数量,如果为0则表示没有相关记录,反之显示记录 if(m = 0) printf(”没有找到记录!n”); else system(”CLS”);
7、 show(); /以追加的方式打开 if(fp=fopen(data。txt,”a)=NULL) printf(不能打开文件!n); return; printf(”是否输入?(y/n):”); scanf(s,ch); while(strcmp(ch,”Y”)=0|strcmp(ch,”y”)=0)/判断是否要录入新信息*/ printf(”编号:”); scanf(”d”,commm.num);/*输入学生学号/ for(i=0;im;i+) if(commi.num = commm。num) printf(该记录已经存在,按任意键继续!”); getch(); fclose(fp);
8、return; printf(”商品名:”); scanf(”s,commm.name); /*输入学生姓名*/ printf(”单价:”); scanf(”%lf,&commm.price); /输入商品单价/ printf(”数量:”); scanf(%lf,commm。count); /输入商品数量*/ commm。total=commm。price commm.count; /*计算出总金额*/ if(fwrite(&commm,LEN,1,fp)!=1) /*将新录入的信息写入指定的磁盘文件/ printf(不能保存!”); getch(); else printf(”s 已经保存!
9、n”,commm。name); m+; printf(是否继续?(y/n):”);/询问是否继续*/ scanf(%s”,ch); fclose(fp); printf(”OK!n”);/显示模块/基本流程,先把文件中的数据依次读入到商品结构体中,/并依次显示void show() FILE fp; int i,m=0; fp=fopen(data。txt”,a+”); while(!feof(fp) if(fread(commm ,LEN,1,fp)=1) m+; fclose(fp); printf(编号 商品名称 单价 数量 总金额tn); for(i=0;im;i+) printf(F
10、ORMAT,DATA);/*将信息按指定格式打印*/ /排序模块/基本流程,先把文件中的数据读到商品结构体数组缓冲区中,/然后进行冒泡排序,/最后写入文件,/在关闭文件void order() FILE *fp; struct commdity t;/用来作为交换时的中间变量 int i=0,j=0,m=0; /以追加,读写的方式打开文件 if(fp=fopen(”data。txt”,a+”)=NULL) printf(不能打开文件!n); return; /先把文件中的数据读到结构体数组中去。并得到文件中记录的个数,再关闭文件 while(!feof(fp)) if(fread(commm
11、,LEN,1,fp)=1) m+; fclose(fp); /根据记录条数做出相应的选择,没记录则返回,有记录则排序 if(m=0) printf(没有记录!n”); return; else /冒泡排序 for(i=0;im1;i+) for(j=i+1;jm;j+) if(commi。total commj。total) t=commi; commi=commj; commj=t; /以写的方式打开文件 if(fp=fopen(”data。txt”,w”)=NULL) printf(”不能打开n); return; /将重新排好序的内容重新写入指定的磁盘文件中,并关闭文件 for(i=0;
12、im;i+) if(fwrite(&commi ,LEN,1,fp)!=1) printf(”s 不能保存!n”); getch(); return; fclose(fp); printf(保存成功n”); /查找记录模块/本模块的流程是先打开文件并读取里面的数据到商品结构体数组缓冲区中/用户输入编号与商品结构体中缓冲区的数据进行比较,如果有则显示,没有则输出提示信息void search() FILE *fp; int num,i,m=0; char ch2; /以追加 和写的方式打开文件 if(fp=fopen(”data.txt,a+”))=NULL) printf(”不能打开文件!n”
13、); return ; /把文件中的数据依次读入到结构体中,并关闭文件 while(!feof(fp) if(fread(commm,LEN,1,fp)=1) m+; fclose(fp); /如果没有记录,则返回,否则执行显示操作 if(m=0) printf( 没有记录!n); return; else /用户输入编号 printf(”请输入编号:); scanf(”%d”,num); /用循环语句来比较用户输入的编号是否存在 for(i=0;im;i+) if(num=commi。num) printf(”已经找到该记录,是否显示?(y/n); scanf(”s”,ch); if(str
14、cmp(ch,”y)=0strcmp(ch,Y”)=0) printf(编号 商品名称 单价 数量 总金额tn); printf(FORMAT,DATA); break; else return; /如果上面的循环语句执行完都没有找到 ,则会执行本判断语句 if(i=m) printf(”没有找到相关记录!n”); /删除商品模块/本模块的流程为先打开文件,并把数据写到商品结构体数组缓冲区中去/用户输入相关编号与结构体数组中的数据相比较,如果存在则把结构体数组缓冲区进行修改/把修改后的结构体数组缓冲区再次写入文件void del() FILE fp; int num,i,j,m=0; char
15、 ch2; /以追加和读的方式打开文件 if(fp=fopen(data。txt”,”a+”)=NULL) printf(”不能打开文件n”); return; /把文件中的内容依次写到商品结构体数组中,并记录信息条数,最后关闭文件 while(!feof(fp)) if(fread(&commm,LEN,1,fp)=1) m+; fclose(fp); /根据商品信息条数进行相应的处理 if(m=0) printf(”没有记录!n”); return; else /用户输入编号 printf(”请输入编号:); scanf(%d”,num); /用循环语句来比较是否有用户输入的记录 for(
16、i=0;im;i+) if(num=commi。num) break; /没找到用户需要的记录则返回 if(i=m) printf(没有找到相关记录”); getchar(); return; /找到用户需要的记录,要求用户输入选择 printf(”该记录已经找到,是否删除?(y/n)); scanf(”s,ch); if(strcmp(ch,”y”)=0|strcmp(”ch”,Y”)=0) for(j=i;jm;j+)/*从找到的记录起,依次把他后面的数据覆盖前面的数据/ commj=commj+1; m;/*记录条数减一个*/ printf(”成功删除!n”); /以写的方式打开文件 i
17、f(fp=fopen(”data.txt,”w”))=NULL) printf(不能打开n”); return; /把商品结构体数组中的数据依次写入文件 for(j=0;jm;j+) if(fwrite(commj,LEN,1,fp)!=1) printf(保存出错!n”); return; printf(”保存成功!n); fclose(fp); /修改商品模块/本模块流程为先打开文件读商品结构体数组缓冲区中/用户输入数据与缓冲区得数据进行比较/有则先显示,并修该对应的缓冲区/把修改后的缓冲区写入到文件void modify() FILE fp; int i,j,m=0,num; char
18、ch2; /以追加和读的方式打开文件 if(fp=fopen(data。txt,”a+”))=NULL) printf(”不能打开文件!n); return; /把文件中的信息写入到商品结构体数组中,并统计记录条数,然后关闭文件 while(!feof(fp)) if(fread(&commm,LEN,1,fp)=1) m+; fclose(fp); /根据记录条数做出相应的选择 if(m=0) printf(没有记录!n); return; else /用户输入编号 printf(”请输入编号:); scanf(”d”,&num); /用循环语句来比较是否有用户输入的记录 for(i=0;i
19、m;i+) if(num=commi.num) break; /没有找到用户输入的记录,返回 if(i=m) printf(没有找到相关记录”); getchar(); return; /先显示本条记录 printf(编号 商品名称 单价 数量 总金额tn”); printf(FORMAT,DATA); /用户输入选择 printf(是否修改?(y/n); scanf(”s,ch); if(strcmp(ch,y”)=0 | strcmp(ch,Y)=0) printf(”商品名:n); scanf(”%s,commi.name); printf(”单价:n); scanf(”lf”,comm
20、i。price); printf(”数量:n); scanf(lf,commi.count); commi.total = commi.price commi.count; /以写的方式打开文件 if(fp=fopen(data。txt”,”w”)=NULL) printf(”不能打开文件!n); return; for(j=0;jm;j+) if(fwrite(commj,LEN,1,fp)!=1) printf( 不能保存!n”); fclose(fp); return; printf(”保存成功!n”); fclose(fp); printf(ok”); /软件的一些信息void ver
21、sion() printf(”version 1.0n); printf(the writer is xxxn); printf(”在艰苦的环境中编写的程序2012。11。45n); return;/插入模块/基本流程为先打开一个文件,把数据写入缓冲区/在哪个编号后面插入,如果有此编号则插入,反之退出/在插入之前先把这个空间空出来,再输入插入的编号,如果有重复则退出,否则为这个空间赋值/把新的缓冲区写到文件中void insert() FILE *fp; int i,j,k,m=0,num; /以追加和读的方式打开一个文件 if(fp=fopen(data。txt”,a+”))=NULL) p
22、rintf( 不能打开文件n”); return; /把文件中的内容依次写入缓冲区,统计记录条数,并关闭文件 while(!feof(fp) if(fread(commm,LEN,1,fp)=1) m+; fclose(fp); /根据记录条数做出相应选择 if(m=0) printf(”没有记录n”); return; else printf(”请在某条记录后插入:n”); scanf(”%d,num); for(i=0;ii;j-) commj+1 = commj;/*从最后一个位置依次往后挪动,为要插入的地方腾出一块空间*/ /对这个空间赋值 printf(”现在输入插入的信息!n); printf(请输入编号:n);/编号/ scanf(d,commi+1。num);/*往此空间输入信息/ for(k=0;k=m;k+)/*判断是否输入重复的记录/
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1