您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > C语言大作业-超市货物管理系统
(说明:程序密码为sxd)#includestdio.h#includestring.h#includestdlib.h//exit()的头文件#includeconio.h//屏幕操作函数#defineN100//控制学生记录的容量#defineLEN9voidcaidan();voidbrowse();typedefstructgoods{charBH[LEN];/*编号*/charMZ[20];/*名字*/floatJJ;/*进价*/floatMJ;/*卖价*/floatYL;/*盈利*/intSR;/*生产日期*/intDR;/*到期日期*/doubleave;/*删除标记*/}GDS;GDSgds[N];//定义一个外部货物结构体变量/***【结束程序函数】***/voidjiesu(){intj;printf(确认要结束?\n按1返回,按0结束\n);scanf(%d,&j);if(j==0)exit(0);}/*****以写的方式保存数据到文件的函数【原数据将被覆盖】*****/intbaocun(intn)//保存函数,保存n个记录{FILE*fp;inti;if((fp=fopen(sixudong.txt,wb))==NULL)//以二进制写的方式打开,在此前的记录被覆盖{printf(无法打开文件!\n任意键退出程序......\n);getch();//预防闪屏return0;}for(i=0;in;i++)if(gds[i].ave!=0)//在后面的del()函数中通过将gds[i].ave=0来表示该记录被删除了if(fwrite(&gds[i],sizeof(structgoods),1,fp)!=1)//开始写入文件printf(文件写入发生错误\n);fclose(fp);return0;//我只是随便赋的值,只是为了消除一个警告}/********【拷贝函数单纯的将一个文件拷贝到另一个文件中】*******/voidkaobei(){charoutfile[20],infile[20];//保存源文件名和目标文件名FILE*sfp,*tfp;//定义指向源文件(sourcefile)和目标文件(targetfile)的指针GDS*p=NULL;//定义临时指针,暂存读出的记录system(CLS);//清屏;printf(请输入需要被复制的文件名(默认数据处理在sixudong.txt中):\n);scanf(%s,infile);//输入源文件名if((sfp=fopen(infile,rb))==NULL)//以二进制方式打开源文件{printf(无法打开文件!\n任意键退出程序......\n);//显示不能打开文件的信息getch();return;}printf(另存为...,比如:dong.txt:\n);//提示输入目标文件名scanf(%s,outfile);//输入目标文件名if((tfp=fopen(outfile,wb))==NULL)//以二进制写方式打开目标文件{printf(无法打开文件!\n\n);//显示不能打开文件的信息getch();return;//退出程序,同exit(0)}while(!feof(sfp))//读文件直到文件尾fputc(fgetc(sfp),tfp);//从stp复制文件到tfpfclose(sfp);//关闭源文件fclose(tfp);//关闭目标文件printf(\n复制成功!!!\n);//显示拷贝成功信息printf(\n输入任意键返回主菜单);getch();caidan();}/***【加载记录或可以计算记录个数的函数】***/intdakai(){FILE*fp;inti;if((fp=fopen(sixudong.txt,rb))==NULL)//以二进制读的方式打开{printf(无法打开文件!\n任意键退出程序......\n);//显示不能打开文件的信息getch();//预防闪屏return0;}for(i=0;!feof(fp);i++)fread(&gds[i],sizeof(structgoods),1,fp);//将文件数据读入货物结构体fclose(fp);return(i-1);//返回目前总的记录个数,注意是i-1}/***【一个任务结束时的选择浏览还是返回的函数】***/voidliu_fan(){intw;printf(\n\t操作成功!^_^\n);printf(\t接着干什么?\n\t1).立刻浏览全部数据\t2).返回:);scanf(%d,&w);if(w==1)browse();elsecaidan();}/***【显示数据结构项目函数】***/voidxianshid(){printf(\n编号\t名字\t进价卖价盈利生产日期到期日期\n);//显示行头}/***【求盈利函数】***/voidayingli(inti){gds[i].YL=gds[i].MJ-gds[i].JJ;gds[i].ave=(gds[i].MJ+gds[i].JJ)/2;}/*******【编号长度处理函数】********/voidlenbian(inti){intj,l,a;l=strlen(gds[i].BH);if(lLEN){for(j=LEN-l,a=0;jLEN;j++){gds[i].BH[j]=gds[i].BH[a++];}gds[i].BH[i]='\0';for(a=0;aLEN-l;a++)gds[i].BH[a]='0';}if(lLEN)gds[i].BH[l]='\0';}/*******【编号输入函数】*******/inthaoshuru(inti,intn)//i表示第i个货物信息,n表示比较到第n个货物{intj,k,w1;do{w1=0;printf(编号:\t\t【%d位,低于%d位前面补0,长的截尾处理!】\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b,LEN,LEN);scanf(%s,gds[i].BH);lenbian(i);for(j=0;gds[i].BH[j]!='\0';j++)//编号输入函数,作了严格的规定if(gds[i].BH[j]'0'||gds[i].BH[j]'9')//判断编号是否为数字{puts(别开玩笑!只能输入0~9.好吧,再给你一次机会,别让我失望!\n);w1=1;//这个w1=1,表示编号中输入了不是数字的字符break;}if(w1!=1)//w1!=1,确保验证时学号已经是由0-9的数组成的for(k=0;kn;k++)//比较到第n个货物if(k!=i&&strcmp(gds[k].BH,gds[i].BH)==0)//判断编号是否有雷同{puts(已经存在啦!重来一次!\n);w1=1;//w1=1,表示编号存在雷同break;}}while(w1==1);//w1=1代表学号输入又问题,要重新输入return0;}/***【价格输入函数】***/intjiashuru(inti){printf(进价::);scanf(%f,&gds[i].JJ);printf(卖价::);scanf(%f,&gds[i].MJ);return0;}/***【日期输入函数】***/voidrishuru(inti){do{printf(生产日期【格式19990320表示1999年3月20日】:);scanf(%d,&gds[i].SR);if(gds[i].SR19900000)/*判断日期是否太老*/printf(搞错了吧?\n);}while(gds[i].SR19900000);do{printf(到期日期格式同上:);scanf(%d,&gds[i].DR);if(gds[i].DRgds[i].SR)/*判断到期日期是否在生产日期之前*/printf(搞错了吧?);}while(gds[i].DRgds[i].SR);}/***【输入一整条记录的函数】***/voidinput(inti){haoshuru(i,i);//调用输入编号的函数printf(名子:);scanf(%s,gds[i].MZ);//输入名字jiashuru(i);//输入价格ayingli(i);//计算盈利rishuru(i);//日期输入函数}/***【显示一整条记录的函数】***/voidxianshiyi(inti){printf(%11s,gds[i].BH);//输出编号和名子printf(%-11s,gds[i].MZ);printf(%-7.1f,gds[i].JJ);//输出价格printf(%-7.1f,gds[i].MJ);printf(%-7.1f,gds[i].YL);//输出盈利printf(%-10d,gds[i].SR);//输出生产日期printf(%-10d\n,gds[i].DR);//输出到期日期}/*【显示----函数顶部】*/voidtopput___(){printf(\n记录浏览);printf(\n--------------------------------------------------------------------------------\n);}/*【显示----函数底部】*/voidputs___(){printf(\n\n--------------------------------------------------------------------------------\n);}/*【修改记录函数】*/intxiugaii(inti,intn)//修改数据函数,修改第i个记录{intc,w1;do{puts(\n你想修改什么:=\n\n1).编号\t2).名字\t3).进价\t4).卖价\t5).C日期\n6).重输所有记录\t8).取消并返回);printf(想好就输,快:);scanf(%d,&c);if(c8||c1){puts(\n选择失误!严肃点,再来一次!);//判断选择是否错误,若是则重新选择getchar();//当输入时字符时可以防止死循环}}while(c7||c1);do{switch(c)//选择要修改的项目{case1:haoshuru(i,n);break;//调用学号输入函数case2:printf(姓名:);scanf(%s,gds[i].MZ);break;case3:printf(进价:);scanf(%f,&gds[i].JJ);break;case4:printf(卖价:);scanf(%f,&gds[i].MJ);break;case5:rishuru(i);break;//调用日期输入函数case6:input(i);break;//调用输入一整条记录的函数case7:caidan();//break;在最后,有没有无所谓}if(c2&&c6)ayingli(i);//由于3,4项改变的同时也把盈利动了,必须修正一下puts(\n现在:\n);xianshid();xianshiyi(i);//显示修改后的数据printf(\n你确定你目前的决定?\n\n\t1).当然啦!\t2).不不不,重修改一下!\n\t3).算了还是走吧,别保存了![]\b\b);//是否确定scanf(%d,&w1);//选择2则表示这次修改错误要重新修改}while(w1==2);returnw1;//返回控制值}/************输入模块************/voidshuru(){inti,n;system(CLS);//引用外部清屏,clrscr()在VC++中不好用printf(输入你要记录的货物数吧:(1~%d)?\t['0'返回]:\n,N);scanf(%d,&n);//要输入的计入个数
本文标题:C语言大作业-超市货物管理系统
链接地址:https://www.777doc.com/doc-1402878 .html