收藏 分销(赏)

C语言课程设计-结账系统.docx

上传人:人****来 文档编号:4737731 上传时间:2024-10-11 格式:DOCX 页数:39 大小:1.81MB
下载 相关 举报
C语言课程设计-结账系统.docx_第1页
第1页 / 共39页
C语言课程设计-结账系统.docx_第2页
第2页 / 共39页
点击查看更多>>
资源描述
软件学院 课程设计报告 设计名称: C语言课程设计 选题名称: 结账系统 姓 名: 王帅 学 号: 1515925717 专业班级: 云计算3班 系 (院): 软件学院 设计时间: 2015.12.26~2015.12.29 设计地点: 实验室15#508 一、系统设计 该程序设计主要利用了C语言的基本知识,程序的几乎全部工作都是由各个函数分别完成的。该小型结账系统主要实现了对管理员和客户的功能。以下就是程序实现的主要功能: 管理员的功能: 1.录入商品信息。 2.打印商品信息。 3.插入商品信息。 4.删除商品信息。 5.修改商品信息。 6.读出商品信息。 7.退出系统并保存和销毁。 客户的功能: 1. 查询商品信息。 2. 读出商品信息。 3. 求商品清单。 4. 查看商品的编号。 5. 退出系统并保存和销毁. 程序模块图如下: 结账系统 打印商品信息 录入商品信息 退出保存和销毁 插入商品信息 删除商品信息 修改商品信息 读出商品信息 退出保存和销毁 求取商品清单 读出商品信息 查询商品信息 查看商品编号 流程图: 管理员: 开始始始 输入n值 录入商输入品信息 i= 2 打印 是 插入 3 是 4 删除 是 修改 5 是 6 读出 是 0 结束 开始 客户: 查询 查看编号 4 3 1 菜单 读出 i= 是 商品清单 是 是 0 结束 录入流程图: 查询流程图: i=1 无此商品 输出信息 输入编号 开始 输入n的值 i++ 是否找到 录入信息 是 是 否 i<n 结束 插入流程图: 删除流程图: 开始 开始 输入编号 输入编号 是否找到 是否找到 插入 否 否 无此商品 删除信息 插入成功 无此商品 、 修改流程图: 销毁流程图: 开始 开始 销毁 输入编号 是否为空 是否找到 否 否 修改商品 无此商品 结束 二.详细设计 1.写出头文件 #include<stdio.h> #include<stdlib.h> 2.利用宏定义申请空间的字符长度 #define N sizeof(struct good) 3.定义结构体变量 struct good { int num; char name[20]; float price; int quantity; struct good *next; }; 4.创建一个头结点 struct good *tou() // 创建头结点 { struct good *head; head=(struct good *)malloc(N); if(head==NULL) { printf("创建失败!\n"); exit(0); } head->next=NULL; return head; } 5.创建一个商品的链表,链表的长度自行定义,创建完成后返回头结点。 struct good *creat(struct good *head) //创建链表 { int i=1,n; struct good *q,*p; head->next=NULL; p=head; printf("你想录入几个商品的信息\n"); scanf("%d",&n); while(i<=n) { q=(struct good *)malloc(N); printf("输入%d商品的编号\n",i); scanf("%d",&q->num); printf("输入%d商品的名称\n",i); scanf("%s",q->name); printf("输入%d商品的价格\n",i); scanf("%f",&q->price); printf("输入%d商品的数量\n",i); scanf("%d",&q->quantity); p->next=q; p=q; i++; } p->next=NULL; return head; } 6. 插入一个结点。输入你想插入在那个商品的编号,开始从头到尾寻找这个编号,找到了,插入进取,没有找到输出无此商品。 int insert(struct good *head) //插入 { struct good *p,*q,*t,*w; int num,i,j,m=1; printf("你想插入那个商品的后面\n"); scanf("%d",&num); p=head->next; while(p!=NULL) { if(p->num==num) { t=(struct good *)malloc(N); if(t==NULL) { printf("创建失败!!!\n"); exit(0); } t->next=NULL; w=t; while(i) { q=(struct good *)malloc(N); printf("插入%d商品的编号\n",m); scanf("%d",&q->num); printf("插入%d商品的名称\n",m); scanf("%s",q->name); printf("插入%d商品的价格\n",m); scanf("%f",&q->price); printf("插入%d商品的数量\n",m); scanf("%d",&q->quantity); w->next=q; w=q; m++; printf("是否继续插入?继续请按<1>,停止请按<0>\n"); scanf("%d",&j); i=j; } w->next=p->next; p->next=t->next; printf("插入成功!!!\n"); return 0; } p=p->next; } } 7.删除。输入一个你想删除商品的编号。从头到尾开始寻找,找到了删除此编号,没有找到,则输出无此商品。 struct good *delete(struct good *head) //删除 { struct good *p,*q; int num; printf("输入你想删除商品的编号\n"); scanf("%d",&num); p=head; while(p->num!=num && p->next!=NULL) { q=p; p=p->next; } if(num==p->num) { q->next=p->next; free(p); printf("删除成功!! !\n"); } else { printf("没有该商品!!!\n"); } return head; } 8.销毁链表。从头的下一个开始销毁链表,利用循环来销毁。 void destroy(struct good *head) //销毁链表 { struct good *p,*q; p=head->next; q=NULL; while(p!=NULL) { q=p; p=p->next; free(q); } free(p); } 9.查询。输入一个商品的编号,从头到尾开始寻找,找到了输出寻找成功。 int Locate(struct good *head,int num) //查询 { struct good *p; p=head->next; printf("商品编号 名称 价格 数量\n"); while(p!=NULL) { if(p->num==num) { printf(" %d %s %5.1f %d\n",p->num,p->name,p->price,p->quantity); printf("寻找成功!!!\n"); return 1; } p=p->next; } return -1; } 10.修改。输入一个商品的编号,开始从头到尾查找,找着了并修改,输出修改成功,没有找到则输出无此商品。 void shop(struct good *head,int num) //<修改> { struct good *p; p=head; while(p->num!=num && p->next!=NULL) { p=p->next; } if(p->num==num) { printf("输入商品的编号\n"); scanf("%d",&p->num); printf("输入商品的名称\n"); scanf("%s",p->name); printf("输入商品的价格\n"); scanf("%f",&p->price); printf("输入商品的数量\n"); scanf("%d",&p->quantity); printf("修改成功!!!\n"); } else { printf("没有该商品!!!\n"); } } 11.保存到二进制文件中 void save(struct good *head) //保存 { FILE *fp; struct good *p; p=head->next; if ((fp=fopen("20.txt","wb"))==NULL) { printf("文件打开失败!\n" ); exit (0); } while(p!=NULL) { if(fwrite(p,N,1,fp)!=1) { printf("文件保存失败!\n"); } p=p->next; } fclose(fp); printf("\n"); printf("文件保存成功!\n"); } 12.读出。打开文件,从文件中每读出一组数据放入刚创建的链表的结点中,读取完毕后,关闭文件,最后返回头结点。 struct good *read() //读出 { FILE *fp; struct good *p,*q,*head; if((fp=fopen("20.txt","rb"))==NULL) { printf("error\n"); exit(0); } head=(struct good *)malloc(N); head->next=NULL; p=head; q=(struct good*)malloc(N); while(fread(q,N,1,fp)>0) { p->next=q; p=q; q=(struct good*)malloc(N); } p->next=NULL; fclose(fp); return head; } 13.商品清单。客户输入商品的编号,便显示那一个商品的全部信息,再输入购买的数量和支付金钱后,清单上便显示你购买商品的数量,支付的金钱和找回的零钱。 void show(struct good *head,int num) //商品清单 { struct good *p; float t,sum1,sum2,sum; p=head->next; printf("商品编号 名称 价格 数量\n"); while(p!=NULL) { if(p->num==num) { printf("输入你想购买的数量\n"); scanf("%f",&t); sum1=(p->price)*t; printf("总价钱为:%5.1f\n",sum1); printf("输入你支付金钱\n"); scanf("%f",&sum2); sum=sum2-sum1; printf("你购买商品的数量为:%5.1f 你支付金钱为:%5.1f 找回你的钱为:%5.1f\n",t,sum2,sum); } p=p->next; } } 14.打印出商品的编号,名称,价格,数量。 void print(struct good *head) //打印 { struct good *p; p=head->next; printf("商品编号 名称 价格 数量\n"); while(p!=NULL) { printf(" %d %s %5.1f %d\n",p->num,p->name,p->price,p->quantity); p=p->next; } } 15.查询商品的编号。 void judge(struct good *head) { struct good *p; p=head->next; printf("商品的编号\n"); while(p!=NULL) { printf("%d\n",p->num); p=p->next; } } 16.管理员的菜单。 void menu1() // 管理员菜单 { printf(" &&&&欢迎来到管理员的菜单&&&& \n"); printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<功能>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"); printf(" 录入商品信息请按<1> \n"); printf(" 打印商品信息请按<2> \n"); printf(" 插入商品信息请按<3> \n"); printf(" 删除一个商品信息请按<4> \n"); printf(" 修改一个商品信息请按<5> \n"); printf(" 读出商品信息请按<6> \n"); printf(" 退出系统并保存请按<0> \n"); } 17.客户的菜单。 void menu2() // 客户菜单 { printf(" &&&&欢迎来到客户的菜单&&&& \n"); printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<功能>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"); printf(" 查询一个商品信息请按<1> \n"); printf(" 读出商品信息请按<2> \n"); printf(" 求商品清单请按<3> \n"); printf(" 查看商品的编号请按<4> \n"); printf(" 退出系统并保存请按<0> \n"); } 18.管理员功能的选择。 void f1() // 管理员选择的功能 { int i,num; struct good *p; p=tou(); while(1) { menu1(); printf("请输入你想选择的功能\n"); scanf("%d",&i); switch(i) { case 1: creat(p); break; case 2: print(p); break; case 3: insert(p); break; case 4: delete(p); break; case 5: printf("输入你想修改商品的编号\n"); scanf("%d",&num); shop(p,num); break; case 6: p=read(); break; case 0: save(p); destroy(p); printf("《《《《《《《《《《《谢谢你的使用》》》》》》》\n"); exit(0); } } } 19.客户功能的选择。 void f2() // 客户选择的功能 { struct good *p; int i,num; p=tou(); while(1) { menu2(); printf("请输入你想选择的功能\n"); scanf("%d",&i); switch(i) { case 1: printf("输入你想查询商品的编号\n"); scanf("%d",&num); Locate(p,num); break; case 2: p=read(); break; case 3: printf("输入你想购买商品的编号\n"); scanf("%d",&num); show(p,num); break; case 4: judge(p); break; case 0: save(p); destroy(p); printf("《《《《《《《《《《《谢谢你的使用》》》》》》》\n"); exit(0); } } } 20. 设置管理员的密码 void w() { int i=1,t,j=123456; char a[20],name[20]={"ws"}; printf("请输入管理员的帐号\n"); scanf("%s",a); do { if(strcmp(a,name)!=0) { printf("请重新输入\n"); scanf("%s",a); } if(strcmp(a,name)==0) { printf("请输入管理员的密码\n"); scanf("%d",&t); do { if(t!=j) { printf("请重新输入\n"); scanf("%d",t); } }while(t!=j); } }while(strcmp(a,name)!=0); printf("登陆成功!!!\n"); } 21主函数。 int main() { int i; printf("管理员登陆请按<1>,若是客户登陆请按<0>\n"); scanf("%d",&i); if(i==1) { w(); f1(); } if(i==0) { f2(); } else { printf("对不起!没有此选择\n"); } return 0; } 三. 设计与调试分析 1. 首先在编写程序的时候将几个基本的函数写出来,例如添加、删除、查询、显示函数,在这几个程序能成功地运行出来之后,又一步一步编写我认为困难的函数。 2. 从一个文件中读出时要用到while循环,再循环里面又的创建一个又一个结点,把从文件中读出的数据一个一个的放入刚创建的链表中。这是创建链表与读出相结合而弄出来的,最后要关闭文件,返回头结点。 struct good *read() { FILE *fp; struct good *p,*q,*head; if((fp=fopen("20.txt","rb"))==NULL) { printf("error\n"); exit(0); } head=(struct good *)malloc(N); head->next=NULL; p=head; q=(struct good*)malloc(N); while(fread(q,N,1,fp)>0) { p->next=q; p=q; q=(struct good*)malloc(N); } p->next=NULL; fclose(fp); return head; } 3. 客户要输入编号来查找这种商品的全部信息。如:价格,数量等。 如果客户直接输入商品的编号和数量的话,就会出现一个问题。你知道商品的数量有多少吗?所以必须先输入商品的编号,查看商品的数量,再来决定购买时的数量。输入数量后,就知道总价钱,再输入你支付的金额,就会出现找回你的零钱了。 void show(struct good *head,int num) //商品清单 { struct good *p; float t,sum1,sum2,sum; p=head->next; while(p!=NULL) { if(p->num==num) { printf("输入你想购买的数量\n"); scanf("%f",&t); sum1=(p->price)*t; printf("总价钱为:%5.1f\n",sum1); printf("输入你支付金钱\n"); scanf("%f",&sum2); sum=sum2-sum1; printf("你购买商品的数量为:%5.1f 你支付金钱为:%5.1f 找回你的钱为:%5.1f\n",t,sum2,sum); } p=p->next; } } 4. 由于实验的功能有管理员和客户的,因此我必须把这两个分开来写,如果分开来写,我的主函数就会变得非常长,不宜找出错误和观看。因此我把管理员和客户所执行的功能,用函数分开来写就清晰多了。在主函数里调用他们就可以了。 void menu1() // 管理员菜单 { printf(" &&&&欢迎来到管理员的菜单&&&& \n"); printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<功能>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"); printf(" 录入商品信息请按<1> \n"); printf(" 打印商品信息请按<2> \n"); printf(" 插入商品信息请按<3> \n"); printf(" 删除一个商品信息请按<4> \n"); printf(" 修改一个商品信息请按<5> \n"); printf(" 读出商品信息请按<6> \n"); printf(" 退出系统并保存请按<0> \n"); } void menu2() // 客户菜单 { printf(" &&&&欢迎来到客户的菜单&&&& \n"); printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<功能>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"); printf(" 查询一个商品信息请按<1> \n"); printf(" 读出商品信息请按<2> \n"); printf(" 求商品清单请按<3> \n"); printf(" 查看商品的编号请按<4> \n"); printf(" 退出系统并保存请按<0> \n"); } void f1() // 管理员选择的功能 { int i,num; struct good *p; p=tou(); while(1) { menu1(); printf("请输入你想选择的功能\n"); scanf("%d",&i); switch(i) { case 1: creat(p); break; case 2: print(p); break; case 3: insert(p); break; case 4: delete(p); break; case 5: printf("输入你想修改商品的编号\n"); scanf("%d",&num); shop(p,num); break; case 6: p=read(); break; case 0: save(p); destroy(p); printf("《《《《《《《《《《《谢谢你的使用》》》》》》》\n"); exit(0); } } } void f2() // 客户选择的功能 { struct good *p; int i,num; p=tou(); while(1) { menu2(); printf("请输入你想选择的功能\n"); scanf("%d",&i); switch(i) { case 1: printf("输入你想查询商品的编号\n"); scanf("%d",&num); Locate(p,num); break; case 2: p=read(); break; case 3: printf("输入你想购买商品的编号\n"); scanf("%d",&num); show(p,num); break; case 4: judge(p); break; case 0: save(p); destroy(p); printf("《《《《《《《《《《《谢谢你的使用》》》》》》》\n"); exit(0); } } } void w() { int i=1,t,j=123456; char a[20],name[20]={"ws"}; printf("请输入管理员的帐号\n"); scanf("
展开阅读全文

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


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

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

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

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

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

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

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

客服