设计一个会员卡计费管理系统。
功能要求:
(1)新会员登记。(将会员个人信息及此会员的会员卡信息进行录入。)
(2)会员信息修改。
(3)会员续费。(会员出示会员卡后,管理人员根据卡号查找到该会员的信息并显示。此时可以进行续费,续费后,提示成功,并显示更新后的信息。)
(4)会员消费结算。(会员出示会员卡后,管理人员根据卡号查找到该会员的信息,结算本次费用。提示成功,并显示更新后的信息。)累计消费满1000元,及自动升级为VIP会员。之后每次消费给予9折优惠。
(5) 会员退卡。(收回会员卡,并将余额退还,删除该会员信息。)
(6)用菜单进行管理
(7)统计功能。
能够按每个会员的缴费总额进行排序。在排序的最后一行显示所有会员的缴费总额,以及消费总额。能够按累计消费总额进行排序。在排序的最后一行显示所有会员的缴费总额,以及消费总额。
C语言程序设计A课程设计任务书
一、需求分析
1.1功能需求
(1)新会员登记。(将会员个人信息及此会员的会员卡信息进行录入。)
(2)会员信息修改。
(3)会员续费。(会员出示会员卡后,管理人员根据卡号查找到该会员的信息并显示。此时可以进行续费,续费后,提示成功,并显示更新后的信息。)
(4)会员消费结算。(会员出示会员卡后,管理人员根据卡号查找到该会员的信息,结算本次费用。提示成功,并显示更新后的信息。)累计消费满1000元,及自动升级为VIP会员。之后每次消费给予9折优惠。
(5) 会员退卡。(收回会员卡,并将余额退还,删除该会员信息。)
(6)用菜单进行管理
(7)统计功能。
能够按每个会员的缴费总额进行排序。在排序的最后一行显示所有会员的缴费总额,以及消费总额。能够按累计消费总额进行排序。在排序的最后一行显示所有会员的缴费总额,以及消费总额。
1.2数据需求
(1)会员信息包括卡号(整数)、姓名(字符串)、性别(字符)、年龄(整数)、缴费金额(浮点数)、消费金额(浮点数)、住址(字符串)、电话(字符串)。
(2)会员信息通过文件“employee_list”进行持久化存储,文件以二进制形式读写。
1.3性能需求
(1)系统在执行各项操作时,响应时间应在用户可接受的范围内,确保用户体验流畅。
(2)对文件的读写操作应稳定可靠,避免数据丢失或损坏。
1.4界面需求
(1)系统提供清晰明了的菜单,方便用户选择操作选项。
(2)在用户进行输入时,提供明确的提示信息,指导用户正确输入。
(3)操作过程中及操作完成后,向用户显示相应的结果和反馈信息。
二、概要设计
(1)菜单模块
menu()函数:负责显示系统的菜单选项,包括新会员登记、会员信息修改、会员续费、会员消费结算、会员退卡、统计功能和退出系统。
(2)读取模块
load()函数:从指定文件中读取会员信息到内存。
(3)会员管理模块
input()函数:实现新会员的登记功能,包括生成卡号、收集会员信息并保存。
modify()函数:根据输入的会员姓名查找并修改会员信息,提供多种信息字段的修改选项。
add()函数:根据输入的会员卡号进行续费操作,更新缴费金额。
search()函数:通过输入会员卡号进行消费结算,根据消费金额计算余额并给予相应优惠。
del()函数:根据输入的会员姓名删除会员信息。
total()函数:提供按缴费总额和消费总额两种排序方式,对会员信息进行降序排序,并计算所有会员的缴费总额和消费总额。
(4)数据存储模块
save(int m)函数:以覆盖写入的方式将内存中的会员信息保存到文件。
save1(int m)函数:以追加的方式将新会员信息保存到文件。
三、详细设计
1.数据结构:定义了一个名为employee的结构体来存储会员信息,包括会员卡号num(整数)、姓名name(字符串)、性别sex(字符)、年龄age(浮点数)、缴费金额wage(浮点数)、消费金额xiao(浮点数)、住址addr(字符串)和电话tel(字符串)。
2.函数设计:
(1)menu函数的功能:显示系统的操作菜单,包括新会员登记、会员信息修改、会员续费、会员消费结算、会员退卡、统计功能和退出。
(2)save1和 save函数的功能:将内存中的会员信息保存到文件employee_list中。save1用于追加保存,save用于覆盖保存。
(3)load函数的功能:从文件employee_list中加载会员信息到内存中,并返回会员数量。
(4)loadAndGetMaxNum函数的功能:加载会员数据,并返回最大的会员编号。
(5)input函数的功能:实现新会员信息的录入,包括生成会员编号、姓名、性别、年龄、缴费金额、住址和电话等,并保存录入的信息。
(6)modify函数的功能:根据输入的会员姓名查找会员信息,提供修改选项,包括卡号、姓名、性别、年龄、缴费金额、住址和电话,并根据用户选择进行修改。
(7)add函数的功能:根据输入的会员卡号进行续费操作,更新会员的缴费金额,并保存修改后的信息。
(8)search和search_num函数的功能:根据输入的会员卡号查找会员信息,输入消费金额,计算余额,并根据消费金额给予相应的优惠。
(9)del函数的功能:根据输入的会员姓名删除会员信息,并更新会员列表。
(10)total函数的功能:提供按照缴费总额或消费总额进行降序排序的选择,并计算和显示总额统计信息。
3.主函数流程:显示菜单;接收用户输入的操作选项;根据选项调用相应的函数进行处理;在每次操作完成后,询问用户是否继续进行操作或退出系统。
4.文件操作:使用文件employee_list来持久化存储会员信息,通过文件读写操作实现数据的保存和加载。
5.交互设计:在每个操作函数中,都为用户提供了清晰的操作提示和输入要求。对于关键操作,如修改、删除等,会多次向用户确认,以避免误操作。在文件打开操作中,对无法打开文件的情况进行了提示和处理,程序退出。在输入操作选项和会员信息时,对输入不合法的情况进行了提示,要求重新输入。
- 源程序清单和执行结果
1.新会员登记功能:使用input函数,用于生成卡号、收集会员信息并保存。
int loadAndGetMaxNum() //加载已有会员数据,并返回最大卡号
{
FILE *fp;
int j,i=0;
int maxNum=3000; //假设首次登记的最小卡号为 3000
if ((fp=fopen("employee_list","rb"))==NULL)
{
return maxNum;
}
else
{
do
{
fread(&em[i],sizeof(struct employee),1,fp);
i++;
}while(feof(fp)==0);
for(j=0;j<i;j++)
{
if(em[j].num>maxNum)
maxNum=em[j].num;
}
}
fclose(fp);
return maxNum;
}
void input()
{
int i,m;
printf("请输入需要创建信息的会员人数(1--100):");
scanf("%d",&m);printf("\n");
int lastMaxNum=loadAndGetMaxNum(); //获取上次最大卡号
int currentNum=lastMaxNum+1; //本次起始卡号
for(i=0;i<m;i++)
{
em[i].num=currentNum+i; //按顺序生成卡号
printf("卡号: %d\n",em[i].num);
printf("请输入姓名: ");scanf("%s",em[i].name);getchar();
printf("请输入性别(f--女 or m--男): ");