收藏 分销(赏)

C语言图书销售标准管理系统.doc

上传人:a199****6536 文档编号:2993188 上传时间:2024-06-12 格式:DOC 页数:31 大小:467.04KB 下载积分:12 金币
下载 相关 举报
C语言图书销售标准管理系统.doc_第1页
第1页 / 共31页
C语言图书销售标准管理系统.doc_第2页
第2页 / 共31页


点击查看更多>>
资源描述
目录 图书销售管理系统设计 2 一、设计要求 2 二、总体设计思绪 2 1. 关键功效:系统关键包含八个功效模块。 3 2. 总体思绪框图 3 三、关键参数和函数 4 1. 全局变量 4 2. 关键函数 5 四、程序调试及整体实现 14 1. 主菜单运行界面 14 2. 图书信息录入界面 14 3. 图书信息浏览界面 14 4. 图书查询界面 15 5. 图书信息修改界面 16 6. 图书信息删除界面 16 7. 图书信息排序主界面 17 8. 购书清单界面 17 五、体会总结 18 附件 19 图书销售管理系统设计 一、 设计要求 1. 图书信息包含:序号、书名、作者、出版单位、价格。 2. 系统以菜单方法工作。v 3. 图书信息录入功效(图书信息用文件保留)--输入。v 4. 图书信息删除和修改功效。 5. 图书信息浏览功效--输出。v 6. 查询功效--算法:(按书名/作者查询)。 7. 排序功效--算法:(按书名排序/按价格排序)。 8. 图书购置功效:统计选购图书总价,给出清单,屏幕输出参考以下实际购书单。 二、 总体设计思绪 1. 关键功效:系统关键包含八个功效模块。 1) 图书信息录入:将所要录入图书信息包含序号、书名、作者、出版社、价格等录入一个文本文件中。每录入一本书,系统提醒是否继续,若不继续,则返回主界面。 2) 图书信息查询:将全部图书信息包含序号、书名、出版社、作者、价格等显示在屏幕上,最终返回主界面。 3) 图书信息查询:经过输入图书名称或作者完成图书信息查找,并在屏幕上显示,返回主界面。 4) 图书信息修改:经过输入序号,判定此图书是否存在,若不存在则提醒用户重新输入图书序号,若存在则要求输入要修改图书序号,对该图书重新录入信息。录入后,提醒是否继续,如不继续,则返回主界面。 5) 图书信息删除:经过输入序号,判定此图书是否存在,若存在, 则提醒用户是否显示删除后信息,若不存在则提醒用户重新输入图书序号,删除完成后,返回主界面。 6) 图书信息排序:经过输入书名或价格,提醒用户输入想要使用排序方法,排序后信息显示在屏幕上,返回主界面。 7) 图书购置:经过输入要购置图书序号,计算出总本书和总价格并连同其它购置信息一并显示在屏幕上。 8) 退出系统:返回主页面。 2. 总体思绪框图 图书销售管理系统 退出系统 图书信息排序 图书信息删除 图书信息修改 图书信息查询 图书购置清单 图书信息浏览 图书信息录入 图1. 总体思绪框图 三、 关键参数和函数 1. 全局变量 1) 定义一个存放图书信息结构体struct book,并定义这类型变量struct book list[N],用来表示图书数组。 struct book /*定义结构体类型*/ { int num; /*序号为整型*/ char name[40]; /*书名为字符串*/ char author[20]; /*作者为字符串*/ char publish[50]; /*出版社为字符串*/ float price; /*价格为浮点型*/ }; struct book list[N]; /*定义struct book类型变量 list N个*/ 2) int Count=0,定义全局变量,用来表示图书个数,初始值为0。 2. 关键函数 1) 主函数main(),控制整个系统实施步骤,使系统菜单能够循环实施。依据图书馆信息管理系统要求,可设计一个主函数,及定义多个用户自定义函数。经过将switch语句和break语句联合使用来实现多分支选择结构程序设计。case1至case7分别实现不一样功效,并能返回主界面;case0直接返回主界面。 程序代码: void main() { int choice1; printf(" *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*\n"); printf(" * 欢迎进入图书销售管理系统 *\n"); printf(" *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*\n"); do { printf("##################################################"); /*显示菜单*/ printf("功效选项: \n"); printf(" 1 : 图书信息录入 \n"); printf(" 2 : 图书信息浏览 \n"); printf(" 3 : 图书信息查询 \n"); printf(" 4 : 图书信息修改 \n"); printf(" 5 : 图书信息删除 \n"); printf(" 6 : 图书信息排序 \n"); printf(" 7 : 图书购置 \n"); printf(" 0 : 退出系统 \n"); printf("###############################################################"); printf("\t请选择操作:"); scanf("%d", &choice1); switch (choice1) /*菜单选择*/ { case 1 : input();break; case 2 : show_bookinformation(list); break ; case 3 : check_bookinformation (list); break ; case 4 : modify_bookinformation (list); break ; case 5 :delete_bookinformation(list);break ; case 6 :reorder_bookinformation(list);break; case 7 :buytotal(list);break; case 0 :break ; } }while (choice1!=0); printf("谢谢! 欢迎下次使用使用!\n");} 2) 打开数据文件函数open(),把文件信息打开到一个结构体数组中。定义指向文件指针读取数据,若指针指向NULL,则显示“无法操作,无文件信息!!!”,要调用fopen、fclose和fread函数。 程序代码: void open() { int i; FILE *fp; if((fp=fopen("book.txt","rb+"))==NULL) { printf("无法操作,无文件信息!!!\n"); exit(0);} for(i=0;i<N;i++) { if(fread(&list[i],sizeof(struct book),1,fp)==0) { printf("数据输出失败!!!\n"); exit(0);} }fclose(fp);} 3) 信息录入文件函数read(),函数类型为void。定义指向文件指针读取数据,把输入图书信息保留到文件中,若指针指向NULL,则输出无法操作。利用for循环境保护存信息到指定文件。 程序代码: void read() { int i; FILE *fp; if((fp=fopen("book.txt","wr+"))==NULL) { printf("\n不能打开文件!!!\n"); exit(0); } for(i=0;i<N;i++) if(fwrite(&list[i],sizeof(struct book),1,fp)!=1) printf("文件写入错误!!!\n"); fclose(fp);} 4) 信息录入系统函数input(),提供录入图书信息功效。在for循环下,一次提醒用户输入图书序号、书名、作者、出版社和价格。每循环一次,提醒用户是否继续,当选“1”时继续输入图书信息,选“2”时返回主界面;每循环一次Count自增1。 程序代码: void input() { int i,k,j,t; for(j=0;list[j].num!=0;j++) t=j+1; for(i=t;i<N;i++) { printf("\t请输入您图书序号:"); scanf("\t%d",&list[i].num); printf("\t请输入书名:"); scanf("\t%s",list[i].name); printf("\t请输入作者:"); scanf("\t%s",list[i].author); printf("\t请输入出版社:"); scanf("\t%s",list[i].publish); printf("\t请输入价格:"); scanf("\t%f",&list[i].price); fflush(stdin); printf("\t\n是否继续录入?(1.是 2.否)"); scanf("%d",&k); if(k==2) break; } Count=i+1; read();} 5) 删除图书信息函数delete_bookinformation (struct book list[]),提供对图书信息删除功效。此函数运行时利用open函数打开数据文件,读取信息;利用for循环,当输入序号和循环中某一对应数据相同时,将后一个赋值给前一个从而把要删除图书信息删除掉。假如i=0,则直接输出“图书销售系统没有你要输出图书信息!!!”。删除后会显示“删除成功”,同时Count自减1;最终还要实施read函数,重新统计图书信息。 程序代码: void delete_bookinformation (struct book list[]) { int j,k,d,i=0; open(); printf("请输入要删除图书序号:\n"); scanf("%d",&d); for(j=0;list[j].num!=0;j++) { if(list[j].num==d) { for(k=j;list[k].num!=0;k++) list[k]=list[k+1]; i++;}} if(i==0) printf("图书销售系统没有你输入图书序号,请重新选择输入!!!\n"); else Count=Count-1; read(); printf("删除成功\n");} 6) 修改图书信息函数modify_bookinformation (struct book list[]),提供对图书信息修改功效。首先提醒用户输入要修改图书序号,利用for循环找到要修改list[],系统提醒用户依次输入修改后图书序号、图书名、作者、出版社、价格。假如输入序号a为0,则提醒“未发觉您要找书!”。 程序代码: void modify_bookinformation (struct book list[]) { int j,k=0,number; open(); printf("\t请输入您要修改图书序号:"); scanf("%d",&number); for (j=0;list[j].num!=0;j++) if (list[j].num==number) { printf("\n\t请输入您修改后图书信息:\n\n"); printf("\t请输入您要修改图书序号:"); scanf("%d",&list[j].num); printf("\t请输入您修改后书名:"); scanf("%s",list[j].name); printf("\t请输入您修改后作者名:"); scanf("%s",list[j].author); printf("\t请输入您修改后出版社:"); scanf("%s",list[j].publish); printf("\t请输入您修改后书价格:"); scanf("%f",&list[j].price); read(); printf("\n修改成功!"); k++;} if (k==0) printf("\n\n\t找不到需要修改图书!!");} 7) 图书信息输出函数show_bookinformation(struct book list[]),提供图书信息输出功效,浏览图书信息。经过printf()语句将全部图书信息包含包含编号、书名、出版社、作者、价格等信息显示在屏幕上。利用for语句加printf()实现图书信息循环输出显示。 程序代码: void show_bookinformation(struct book list[]) { int i; open(); printf("\n********************图书信息显示************************\n"); printf("图书序号\t图书名\t作者名\t出版社\t图书价格\n"); for(i=0;list[i].num!=0;i++) { printf(" %d\t\t%s\t%s\t%s\t%6.2f\n",list[i].num,list[i].name, list[i].author,list[i].publish,list[i].price); } } 8) 图书信息查询函数check_bookinformation (struct book list[]),提供用户依据图书书名或作者查询图书信息功效。经过printf()语句将全部图书信息包含包含编号、书名、出版社、作者、价格等信息显示在屏幕上。利用for语句加printf()实现图书信息循环输出显示。 经过将switch语句和break语句联合使用来实现多分支选择结构。若选“1”实现按书名查询;若选“2”实现按作者查询。二者代码类似,全部利用字符串操作,最终依次显示查询后结果。 程序代码: void check_bookinformation (struct book list[]) /*查询图书信息*/ {int j,i,t,k=0; char c[20],d[20]; printf("请输入查询方法:\n 1.按书名查询 2按作者查询:\n"); scanf("%d",&t); if(t==1) { open(); printf("请输入要查询书名号:\n"); scanf("%s",c); printf("\n *******你想要查询图书信息(按作者名)********* \n"); for(j=0;list[j].num!=0;j++) if(strcmp(c,list[j].name)==0) { printf("图书序号\t图书名\t作者名\t出版社\t图书价格\n"); printf(" %d\t\t%s\t%s\t%s\t%6.2f\n",list[j].num,list[j].name, list[j].author,list[j].publish,list[j].price); k++;} if(k==0) printf("\n不存在你要查询图书信息!!!\n"); } if(t==2) { open(); printf("请输入要查询作者名:\n"); scanf("%s",d); for(i=0;list[i].num!=0;i++) if(strcmp(d,list[i].author)==0) { printf("图书序号\t图书名\t作者名\t出版社\t图书价格\n"); printf(" %d\t\t%s\t%s\t%s\t%6.2f\n",list[i].num,list[i].name, list[i].author,list[i].publish,list[i].price); k++;} if(k==0) printf("\n不存在你要查询图书信息!!!\n");}} 9) 图书信息排序函数reorder_bookinformation(struct book list[]),提供对图书信息按书名和价格排序功效。排序共有两种可选择方法,按书名排序和按价格排序。利用switch和break实现功效选择。 按书名排序:利用选择排序法和strcmp、strcpy函数在for循环下依次重新循环赋值,按字母前后次序依次排序。假如定义指针fp指向NULL则显示“can’t open the file!”,再利用for循环向屏幕输出排序后全部图书信息,最终要返回主界面。 按价格排序:价格按大小排序。利用冒泡排序法,在for循环下依次重新循环赋值,再利用for循环向屏幕输出排序后全部图书信息,最终返回主界面。 程序代码: void reorder_bookinformation(struct book list[]) {int i,j,a,k; struct book t; FILE *fp; char temp[40]; open(); printf("\n请选择排序方法\n1---书名(按字母次序)\n2---价格(按从高到低)\n"); scanf("%d",&a); switch(a) {case 1: for(i=0;i<Count-1;i++) {k=i; for(j=i+1;j<Count;j++) if(strcmp(list[k].name,list[j].name)>0) k=j; if(k!=i) { strcpy(temp,list[i].name); strcpy(list[i].name,list[k].name); strcpy(list[k].name,temp); } } if((fp=fopen("book.txt","w"))==NULL) { printf("can't open the file!\n"); exit(0);} printf("新序列为:\n"); for(j=0;j<Count;j++) { printf("图书序号\t图书名\t作者名\t出版社\t图书价格\n"); printf(" %d\t\t%s\t%s\t%s\t%6.2f\n",list[j].num,list[j].name, list[j].author,list[j].publish,list[j].price);} read(); break; case 2: for(k=0;list[k].num!=0;k++) for(j=0;list[j].num!=0;j++) if(list[j].price<list[j+1].price) {t=list[j];list[j]=list[j+1];list[j+1]=t;} for(j=0;list[j].num!=0;j++) { printf("图书序号\t图书名\t作者名\t出版社\t图书价格\n"); printf(" %d\t\t%s\t%s\t%s\t%6.2f\n",list[j].num,list[j].name, list[j].author,list[j].publish,list[j].price); k++;} read(); break;} 10) 图书购置清单函数buytotal(struct book list[]),提供统计选购图书总价,给出清单功效。用户输入所购图书序号,输入“0”时结束,系统利用for循环,当输入序号和系统内所存序号相同时,价格相加赋新值,书本数同时计数。最终打印出想要清单。 程序代码: void buytotal(struct book list[]) { int k,m,n,q,r,t=0; float sum=0; char e[50],f[50],l[50],o[50],p[50]; printf("\n ***************************************************\n"); printf("\n 人民邮电出版社样书清单 \n"); printf("\n ***************************************************\n"); printf(" 请输入所购各图书序号(输入0 结束):\n"); scanf("%d",&q); do { for(r=0;r<Count;r++) { if(q==list[r].num) { sum=sum+list[r].price; t++; } } scanf("%d",&q); } while(q!=0); printf(" 累计发书:%d\n",r); printf(" 收书单位:"); scanf("%s",e); printf(" 发书依据:"); scanf("%s",f); printf(" 价格:%.2f\n",sum); printf(" 邮政编码:"); scanf("%d",&k); printf(" 收货地址:"); scanf("%s",l); printf(" 联络电话:"); scanf("%d",&m); printf(" 制单日期:"); scanf("%d",&n); printf(" 货运企业:"); scanf("%s",o); printf(" 验书人:"); scanf("%s",p);} 四、 程序调试及整体实现 1. 主菜单运行界面 连接,检错完成后,运行程序,开始进入主菜单。结果显示以下: 图5. 主菜单界面 2. 图书信息录入界面 在主菜单上选择“1”,依据提醒录入图书信息。屏幕显示以下: 图6. 图书信息录入界面 3. 图书信息浏览界面 在主菜单上选择“2”,显示以下全部图书信息并回到主界面。 图7. 图书信息浏览界面 4. 图书查询界面 在主菜单上选择“3”,然后依据提醒选择查询方法。 选择“1”时,若图书名存在,则显示以下全部图书信息并回到主界面。 图8. 按书名图书查询界面 选择“2”时,若图书作者存在,则显示以下全部图书信息并回到主界面。 图9. 按作者图书查询界面 5. 图书信息修改界面 在主界面上选择“4”, 若图书序号存在,依据提醒输入修改信息,显示以下结果: 图10. 图书信息修改界面 在主菜单上选择“2”,显示修改后信息。 6. 图书信息删除界面 在主菜单上选择“5”,然后依据提醒选择删除图书序号。若图书序号存在,则删除选择结果以下: 图11. 图书信息删除界面 在主菜单上选择“2”,显示删除后信息。 下图为删除后信息: 图12. 删除后结果 7. 图书信息排序主界面 在主菜单上选择“6”,然后依据提醒选择排序方法。 选择“1”时,按书名排序(依据英文字母排序)。 显示结果为: 图13. 按书名排序结果 选择“2”,按价格排序(价格由高到低)。 排序结果以下: 图14. 按价格排序结果 8. 购书清单界面 在主菜单上选择“7”进入购书界面,选择想购书序号最终输入“0”回车,即可显示购书数量和总价,依据提醒输入相关信息完成清单。 购书清单以下: 图15. 购书清单示例 五、 体会总结 经过这次课程设计,使我对C语言有了更深入认识和了解,要想学好它要重在实践,要经过不停上机操作才能愈加好地学习它,我也发觉我好多不足之处,经过学习也有所改善;再有对C语言部分标准库函数不太了解,还有对函数调用正确使用不够熟悉,还有对C语言中常常出现错误也不了解,因以后在学习过程中,我会愈加注视实践操作。 在课程设计过程中,收获知识,提升能力同时,我也知道怎么样去制订、实现计划,课程设计是培养学生综合利用所学知识发觉提出分析和处理实际问题锻炼实践能力关键步骤是对学生实际工作能力具体训练和考察过程.伴随科学技术发展日新月异,自从拿到题目到完成整个编程,从理论到实践,能够学到很多很多东西,同时不仅能够巩固了以前所学过知识,而且学到了很多在书本上所没有学到过知识。 附件 /*定义结构体*/ #include "stdafx.h" #include "string.h" #include "stdlib.h" #define N 100 /*定义图书总容量为100*/ int Count=0; /*定义全局变量,用来表示图书个数*/ struct book /*定义结构体类型*/ { int num; /*序号为整型*/ char name[40]; /*书名为字符串*/ char author[20]; /*作者为字符串*/ char publish[50]; /*出版社为字符串*/ float price; /*价格为浮点型*/ }; struct book list[N]; /*定义struct book类型变量 list N个*/ void show_bookinformation(struct book list[]); /*申明图书信息浏览函数*/ void check_bookinformation (struct book list[]); /*申明图书信息查询函数*/ void modify_bookinformation (struct book list[]); /*申明图书信息修改函数*/ void delete_bookinformation (struct book list[]); /*申明图书信息删除函数*/ void reorder_bookinformation(struct book list[]); /*申明图书信息排序函数*/ void buytotal(struct book list[]); /*申明图书购置信息函数*/ void read(); /*申明数据读入函数*/ void input(); /*申明图书信息录入函数*/ void open(); /*申明数据信息打开函数*/ /*主函数*/ void main() { int choice1; printf(" *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*\n"); printf(" * 欢迎进入图书销售管理系统 *\n"); printf(" *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*\n"); do { printf("################################################################################"); /*显示菜单*/ printf(" 功效选项: \n"); printf(" 1 : 图书信息录入 \n"); printf(" 2 : 图书信息浏览 \n"); printf(" 3 : 图书信息查询 \n"); printf(" 4 : 图书信息修改 \n"); printf(" 5 : 图书信息删除 \n"); printf(" 6 : 图书信息排序 \n"); printf(" 7 : 图书购置 \n"); printf(" 0 : 退出系统 \n"); printf("################################################################################"); printf("\t请选择操作:"); scanf("%d", &choice1); switch (choice1) /*菜单选择*/ { case 1 : input(); break; case 2 : show_bookinformation(list); break ; case 3 : check_bookinformation (list); break ; case 4 : modify_bookinformation (list); break ; case 5 : delete_bookinformation(list); break ; case 6 : reorder_bookinformation(list); break; case 7 : buytotal(list); break; case 0 : break ;} }while (choice1!=0); printf("谢谢! 欢迎下次使用使用!\n");} /*打开文件函数*/ void open() { int i; FILE *fp; if((fp=fopen("book.txt","rb"))==NULL) { printf("无法操作,无文件信息!!!\n"); exit(0);} for(i=0;i<N;i++) { if(fread(&list[i],sizeof(struct book),1,fp)==0) { printf("数据输出失败!!!\n"); exit(0);}} fclose(fp);} /*录入文件函数*/ void read() { int i; FILE *fp; if((fp=fopen("b
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服