c语言课程设计报告会员卡计费系统源代码_第1页
c语言课程设计报告会员卡计费系统源代码_第2页
c语言课程设计报告会员卡计费系统源代码_第3页
c语言课程设计报告会员卡计费系统源代码_第4页
c语言课程设计报告会员卡计费系统源代码_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精品文档可编辑#include #include / 编译预处理指令,引入头文件#include #include #define MAX 10#define MENU_MAIN_COUNT 7typedef struct memberchar nameMAX;char idMAX;char sex2;int age;float money;char tel12; struct member *next;float cost;mem;void menu();void save(mem *p);/ 头指针为 NULL/ 取得链表最后一个元素的节点指针并返/ 自定义符号常量/ 主菜单的选项个数/

2、定义结构体类型 member ,采用链式存储结构/ 姓名/ 卡号/ 性别/ 年龄/ 余额/ 电话/ 定义一个指针指向下一个会员信息/ 消费金额/ 定义结构体变量 mem/* 声明函数 */* 声明函数,声明菜单函数 */ / 声明保存函数mem *head=NULL;mem* get_last(mem *p) 回该指针if(p-next = NULL)return p;elseget_last(p-next);void creat_member(mem*pNew)/ 输入信息操作,会员登记函数/ 创建一个新的会员char s;printf( 卡号 :);scanf(%s,pNew-id);/

3、运用指针输入卡号printf( 请输入姓名 : );scanf(%s,pNew-name); / 运用指针输入姓名a:printf( 请输入性别 (f- 女 m- 男): ); getchar();/ 输入男女s = getchar(); if(s=f|s=m)/ 判断是 男 是女if (s = f | s = F) strcpy(pNew-sex,女);if (s = M | s = m) strcpy(pNew-sex, 男 );else / 如果输入 错误printf( 输入错误,请重新输入 .n);goto a; / 跳转至 a , 重新输入printf( 请输入年龄 : );scan

4、f(%d,&(pNew-age);/ 运用指针输入年龄printf( 请输入缴费金额 : );scanf(%f,&(pNew-money);/ 运用指针输入余额printf( 请输入电话 : );scanf(%s,pNew-tel);/ 运用指针输入电话pNew-cost=0;/ 运用指针初始化消费额为 0printf(n 创建完毕 !n);/ 会员登/ 添加会员/ 按void newMember() 记函数信息char con=N;mem *pLast= NULL;mem *pNew=(mem *)malloc(sizeof(mem); mem 动态分配内存pNew-next=NULL;cr

5、eat_member(pNew);员登记函数if(head = NULL)head = pNew;elsepLast = get_last(head); pLast-next = pNew;/ 判断是否继printf( 继续输入会员信息? (Y 继续, N 返回菜单 ); 续登记getchar();con = getchar();if (con = n | con = N)save(pNew); menu();elsesave(pNew); newMember();/ 显 示 信 息操作printf(+-+-+n);1) Jprintf(| 卡 号 | 姓 名 |性 别| 年龄 | 余 额|n

6、);void table_buttom()-+n);1) J+-+n);1) J/ 定义表头| 累计 消费|电 话/ 定义底线/ 定 义 中void table_head()void table_row(mem *p)间部分printf(|%10s|%6s|%6s|%6d|%8.2f|%8.2f|%11s|n, p-id,p-name,p-sex,p-age,p-money,p-cost,p-tel);精品文档/ 显示统计信可编辑void display(mem *p) p = head;table_head(); while(p != NULL) table_row(p); p = p-ne

7、xt; table_buttom();/ 显示所有信息/ 调用表头/ 调用中间部分/ 调用底线void display_one(mem *p)table_head();table_row(p); table_buttom();/ 只显示一条信息void table_sum() / 定义总计printf(+n);printf(| | | | | 总 计 |n);printf(+n);void table_r(float money,float cost) / 定义总计 2printf(| | | | |n,money,cost);|%8.2f|%8.2f|void display_statist

8、ics(mem *p,float money,float cost) 息函数p = head; table_head();/ 调用表头精品文档/ 检查打开可编辑while(p != NULL)table_row(p);分p = p-next;p=head; table_sum(); table_r(money,cost); table_buttom();作/ 定义中间部/ 定义总计/ 定义总计 2/ 定义表尾/ 文件相关操void save(mem *p) / 保 存 函 数FILE *fp; / 定义一个 指向文件的指针变量fp=fopen(member.dat,a); / 将 fopen函

9、数的返回值赋给指针变量 fpwhile(p != NULL)fprintf(fp, %s %s %s %d %f %s %dn,p-id, p-name, p-sex, p-age,p-money, p-tel,p-cost); p = p-next;fclose(fp);getchar();/ 关闭指针void modify_file(mem *p) 会员信息函数FILE *fp;p= head;if(fp=fopen(member.dat, w)=NULL) 文件的操作是否有错printf( 文件不存在 ); getchar();/ 保存修改精品文档/ 调用菜单void load(mem

10、*p)FILE *fp; mem *pLast = NULL; head=NULL; if(fp=fopen(member.dat,r)=NULL) 操作是否有错printf( 没有会员信息,请录入! ); getch();menu(); while(!feof(fp) 达末尾 mem *pNew = (mem *)malloc(sizeof(mem); 分配内存pNew-next = NULL;fscanf(fp, %s %s %s %d %f %s %fn, pNew-id, pNew-name,/ 从文件加载信息/ 检查打开文件的/ 调用菜单函数/ 文件指针是否到/ 按 mem 动态pN

11、ew-sex, &(pNew-age),menu();函数while(p != NULL)fprintf(fp, %s %s %s %d %f %s %fn,p-id, p-name, p-sex, p-age, p-money, p-tel,p-cost);p = p-next; fclose(fp); getchar();&(pNew-money), pNew-tel,&(pNew-cost); if(head = NULL)head = pNew;elsepLast = get_last(head); pLast-next = pNew; p = head; fclose(fp);/ 通

12、过卡号搜索信息函mem* search_id(mem *p)char idMAX;int i=0;p = head; scanf(%s,id);while(p&(strcmp(id,n)!=0)if(strcmp(p-id,id)=0)i=1; break;else p=p-next; if(strcmp(id,n)=0) menu();if(p=NULL)printf( 您查找的卡号不存在,请重新输入: n); p=search_id(p);elsereturn p;/ 通过卡号搜索信息/ 判断 id 是否不为 n/ 找到/ 输入 n 时返回菜单/ 重新搜索卡号/ 调用寻找函数/ 返回 p/

13、* 修 改 会员 信息操 作*/ void modify_m()char s,fun=y;char pro =|n| 1 姓名 n| 2 性别 n| 3 年龄 n| 4 电话 n| 5 返回 n|n;mem *p;load(p);display(p); / 调用显示函数 printf( 请输入需要修改信息的会员卡号( n 返回菜单): );p=search_id(p); / 调用按号寻找函数 while(fun=y|fun=Y) / 当继续寻找时 system(cls); / 清屏 display_one(p); / 调用显示一条函数 printf( 请选择修改的项目: n);printf(p

14、ro); / 输出 pro getchar();scanf(%c,&fun); switch(fun) / 用 switch 语句选择修改内容 case 1: printf( 请输入姓名 : );scanf(%s,p-name);break;case 2: a:printf( 请输入性别 (f- 女 m- 男): ); getchar(); s = getchar();if(s=f|s=m)if (s = f | s = F) strcpy(p-sex,女 );if (s = M | s = m) strcpy(p-sex,男 ); elseprintf( 输入错误,请重新输入 .n); go

15、to a; break;case 3: printf( 请输入年龄 : );scanf(%d,&(p-age);break;case 4:printf( 请输入电话 : );scanf(%s,p-tel); break;default :break;/ 修改会员的信息可编辑精品文档printf( 是否继续修改 Y/N?); getchar(); fun=getchar(); modify_file(p);数 system(cls); display_one(p); printf(n 修改成功 ,按任意键继续 !); getchar(); menu();void add()float money

16、; mem *p; load(p);display(p); printf(n);printf( 请输入需要续费的会员卡号( n 返回菜单) :); p=search_id(p);system(cls); display_one(p);printf( 请输入续费金额: ); scanf(%f,&money); p-money+=money;modify_file(p);息函数system(cls); display_one(p);printf( 续费成功,任意键继续 !); getchar();menu();void consume()/ 判断是否继续寻找/ 调用保存修改会员信息函/ 清屏/ 调

17、用显示一条函数/ 调用菜单函数/ 会员续费函数/ 会员续费/ 调用浏览函数/ 调用按号寻找函数/ 清屏/ 调用显示一条函数/ 续费/ 调用保存修改会员信/ 清屏/ 调用显示一条函数/ 调用菜单函数/ 会员结算函数/ 会员结算可编辑mem *p; float cost;load(p); display(p);*/* 调用浏览函数printf(n);printf( 请输入需要结算的会员卡号( n 返回菜单) :); p=search_id(p);数system(cls);display_one(p);printf( 请输入花费金额: );scanf(%f,&cost);if(p-cost=1000

18、)vipprintf( 恭喜您已经升级为 VIP ,本次消费 9 折优惠。printf(” 本次实际消费 .2f 元! ,cost*0.9);9折cost*=0.9;if(p-money-cost)cost+=cost;p-money-=cost;getchar();elseif(p-money-cost)cost+=cost;p-money-=cost;modify_file(p);/ 调用按号寻找函/ 清屏/ 调用显示一条函数/ 判断是否升级为n);/ 升级为 vip ,消费打/ 判断余额是否充/ 消费/ 调用保存修改会员信息函数/ 清屏/ 调用显示一条函数/ 调用菜单函数/* 会员退出函

19、数 */ 删除会员信息/* 调用浏览函数 */ 调用按号寻找函数/ 判断指针/ 调用保存函数/ 显示退回的余额/ 调用菜单函数system(cls);display_one(p);printf( 结算成功,任意键继续 !);getch();menu();void delete_m()mem *p,*q=head,*thelast;float money; load(p); display(p); printf(n);printf( 请输入需要删除的会员卡号( n 返回菜单) :); p=search_id(p);thelast=head; if(p=head) head=p-next; mon

20、ey=p-money; free(p) ;else while(thelast) if(thelast-next=p) break;else thelast=thelast-next; thelast-next=p-next; money=p-money; free(p); modify_file(q);printf( 退回余额 %.2f 元! n,money);printf( 删除成功,按任意键继续! ); getch();menu();/* 统计函数 */mem *sort_m()mem *q,*tail,*p=(mem*)malloc(sizeof(mem); p-next=head;h

21、ead=p;tail=NULL; while(tail!=head-next) p=head; q=p-next; while(q-next!=tail) 为空if(p-next-moneyq-next-money) p-next=q-next;排序q-next=q-next-next; p-next-next=q;p=p-next; q=p-next; tail=q; head=head-next; free(p);return head;/ 按缴费总额排序/ 定义 tail/ 判断 q 是否/ 比较大小,/ 返回值mem* sort_c() 序mem *q,*tail,*p=(mem*)m

22、alloc(sizeof(mem); p-next=head;head=p;tail=NULL;while(tail!=head-next)/ 按消费金额排/ 定义 tailp=head;q=p-next;while(q-next!=tail) if(p-next-costq-next-cost) 序p-next=q-next; q-next=q-next-next;p-next-next=q;p=p-next;q=p-next;tail=q;head=head-next;free(p);return head;/ 返回值/比较大小,排float summ(mem *p)float summ=

23、0;p=head;while(p)summ+=p-money; p=p-next;/ 计算缴费总额/ 循环,实现求总额return summ;/ 返回总额float sumc(mem *p)float sumc=0;p=head;while(p)sumc+=p-cost; p=p-next;/ 计算消费总额/ 循环,实现求总额return sumc; / 返回总额 void statistics() / 统计会员信息函数int f=0;mem *p;load(p);system(cls);printf(tt=ntt|ntt|1按缴费总额排序 ntt|2按消费总额排序 ntt|3 返回菜单 nt

24、t|ntt=n) ;printf( 请选择功能: );scanf(%d,&f);switch(f) / 用 switch 语句选择功能 case 1: p=sort_m(p); / 调用按缴费总额排序 display_statistics(p,summ(p),sumc(p); / 调用函数 getch();menu();break;case 2: p=sort_c(p); / 调用按消费总额排序 display_statistics(p,summ(p),sumc(p); / 调用函数 getch();menu();break;default : menu();break;/* 退出系统操作 */ 释放链表空间void clear(mem *p)if(p=NULL)return;if(p-next =

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论