




已阅读5页,还剩84页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
东 莞 理 工 学 院课程设计报告课程名称 程序设计基础课程设计 题 目 机房收费管理系统 院系名称 计算机学院 专业班级 计科1班 学生学号 学生姓名 丁东伟 指导教师 肖捷老师 完成时间 2014 年 12 月 22 日 至 2014 年 12 月 28 日目 录1、系统分析1.1功能需求分析1.2数据需求分析2、系统设计2.1函数调用关系设计2.2函数设计3、系统编码3.1程序文件模块3.2程序代码4、系统调试与运行5、总结5.1自我评价及收获5.2有待解决的问题及进一步完善的思路6、参考文献1系统分析11 功能需要分析开发设计一个机房收费管理软件,要求系统具有如下功能:功能介绍序号模块功能说明1*卡管理*添加卡输入卡号、密码、开卡金额等卡信息,将卡信息保存到data文件夹的card.txt文件中2*查询卡根据输入的卡号,查询卡号相同的卡信息,并以表格形式显示在控制台中3*注销卡根据输入的卡号、密码,将对应卡的状态改为注销,注销卡不能进行上机4计费标准管理新增计费标准输入计费标准的信息,将输入的计费标准保存到data文件夹的rate.txt文件中5查询计费标准根据上机时间,查询对应的计费标准6删除计费标准从计费标准文件data文件夹的rate.txt文件中,删除一条计费标准7修改计费标准修改一条计费标准8计费管理上机根据输入的卡号、密码,判断该卡能否上机,如果能上机,则保存计费信息9下机根据输入下机卡的卡号,进行下机结算操作10*费用管理*充值给一条已经存在的卡进行充值。11*退费将卡中余额返回给用户12查询统计查询消费记录查询一张卡在一段时间内的消费记录13统计总营业额统计一段时间内,总营业额14统计月营业额统计一年中,每个月上机次数、总营业额,将统计结果保存到文本文件中,并以列表形式显示在控制台中。15权限管理*添加管理员超级管理员添加一个管理员信息16*删除管理员超级管理员删除一个管理员信息17配置权限添加管理员时,配置管理员的权限18*系统*登录超级管理员和管理员登录系统19*退出超级管理员和管理员退出系统12 数据需要分析卡数据、管理员数据、计费标准数据是系统管理的主要数据,包括卡号、密码、余额、管理员账号、管理员密码、管理员权限、计费标准。2系统设计21 函数调用关系设计系统分为六个模块,分别为卡管理、费用管理、权限管理、计费标准管理、计费管理、查询统计六个模块,每个模块分为2或3个子模块,每个子模块完成一项功能main()card_manage(cardhead);power_manage(managerhead)standard_manage(standardhead);count_cost_manage(cardhead);query_count(cardhead); add_card(cardhead);query_card(cardhead);delete_card(cardhead);recharge(cardhead);drawback(cardhead);add_manager(managerhead);delete_manage(managerhead);add_charging_standard(standardhead);delete_charging_standard(standardhead);re_charging_standard(standardhead);oncpt(cardhead);offcpt(cardhead); query_cost_record(cardhead);query_countmoney(cardhead);cost_manage(cardhead);count_year_money(cardhead); query_charging_standard(standardhead);save(cardhead,managerhead,standardhead)22 函数设计r 主函数。功 能:读取文件信息,建立卡信息链表、管理员信息、计费标准链表。判断管理员类型。实现菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单。返回值:void。函数名:main。形参表: FILE *fp;struct card *cardhead=NULL,*p3,*p4=NULL;struct manager *managerhead=NULL,*p1,*p2=NULL;struct charging_standard *standardhead=NULL,*p5,*p6=NULL;int l=0,n,i=1,j=1,sel,flag=0,m,f,index; char managernum40,password40;。算 法:定义文件指针fp、链表指针p1,p2和相关变量;以“读”方式打开本文文件card.txt; 循环从文件读取卡信息,存入链表,直至文件结束; while(!feof(fp)。开辟一个新节点:让p1指向新结点,并令p1-next为NULL;。从文件将卡信息读入结点的数据域;。若为首结点,则令cardhead、p2均指向首结点,否则,把p1指向的新结点连接到表尾(则p2-next=p1)。令p2指向新的表尾结点。 以相同方式建立管理员信息链表和计费标准链表。依据输入的管理员类型判断是否与管理员信息链表中的信息相符,相符则依据管理员类型显示不同的菜单功能,不相符则返回。主函数提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数card_manage(cardhead); cost_manage(cardhead); power_manage(managerhead)、standard_manage(standardhea)、count_cost_manage(cardhead)、query_count(cardhead); ),直到选择“退出”为止。由于循环次数未知,选while语句实现。算法用类while结构描述如下:while(1)w 显示菜单;w 输入菜单选项;w 选择执行菜单:即分支调用input_score()、edit_score()、del_score()、count_sel()、print_sorce()或退出;r 卡管理函数。功能:实现菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单。返回值:无。函数名:card_manage。形参表:sel。算法:提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数add_card(cardhead);、 query_card(cardhead); 、delete_card(cardhead); ),直到选择“退出”为止。由于循环次数未知,一般选while语句实现。算法用类while结构描述如下:while(1)w 显示菜单;w 输入菜单选项;w 选择执行菜单:即分支调用add_card(cardhead);、 query_card(cardhead); 、delete_card(cardhead); 或退出;r 权限管理函数。功能:实现菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单。返回值:无。函数名:power_manage。形参表:sel。算法:提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数add_manager(managerhead); 、delete_manage(managerhead); ),直到选择“退出”为止。由于循环次数未知,一般选while语句实现。算法用类while结构描述如下:while(1)w 显示菜单;w 输入菜单选项;w 选择执行菜单:即分支调用add_manager(managerhead); 、delete_manage(managerhead); 或退出;r 费用管理函数。功能:实现菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单。返回值:无。函数名:cost_manage。形参表:sel。算法:提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数recharge(cardhead); 、drawback(cardhead); ),直到选择“退出”为止。由于循环次数未知,一般选while语句实现。算法用类while结构描述如下:while(1)w 显示菜单;w 输入菜单选项;w 选择执行菜单:即分支调用recharge(cardhead); 、drawback(cardhead); 或退出;r 计费管理函数。功能:实现菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单。返回值:无。函数名:count_cost_manage。形参表:sel。算法:提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数oncpt(cardhead); 、offcpt(cardhead); ),直到选择“退出”为止。由于循环次数未知,一般选while语句实现。算法用类while结构描述如下:while(1)w 显示菜单;w 输入菜单选项;w 选择执行菜单:即分支调用oncpt(cardhead); 、offcpt(cardhead); 或退出;r 查询统计函数。功能:实现菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单。返回值:无。函数名:query_count。形参表:sel。算法:提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数query_cost_record(cardhead)、query_countmoney(cardhead)、count_year_money(cardhead); ),直到选择“退出”为止。由于循环次数未知,一般选while语句实现。算法用类while结构描述如下:while(1)w 显示菜单;w 输入菜单选项;w 选择执行菜单:即分支调用query_cost_record(cardhead)、query_countmoney(cardhead)、count_year_money(cardhead); 或退出;r 计费标准管理函数。功能:实现菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单。返回值:无。函数名:standard_manage。形参表:sel。算法:提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数query_charging_standard(standardhead);、add_charging_standard(standardhead);、delete_charging_standard(standardhead);、re_charging_standard(standardhead); ),直到选择“退出”为止。由于循环次数未知,一般选while语句实现。算法用类while结构描述如下:while(1)w 显示菜单;w 输入菜单选项;w 选择执行菜单:即分支调用query_charging_standard(standardhead)、add_charging_standard(standardhead)、delete_charging_standard(standardhead)、re_charging_standard(standardhead) 或退出;r 计费标准管理函数。功能:实现菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单。返回值:无。函数名:standard_manage。形参表:sel。算法:提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数query_charging_standard(standardhead);、add_charging_standard(standardhead);、delete_charging_standard(standardhead);、re_charging_standard(standardhead); ),直到选择“退出”为止。由于循环次数未知,一般选while语句实现。算法用类while结构描述如下:while(1)w 显示菜单;w 输入菜单选项;w 选择执行菜单:即分支调用query_charging_standard(standardhead)、add_charging_standard(standardhead)、delete_charging_standard(standardhead)、re_charging_standard(standardhead) 或退出;r添加卡函数 。功能:向卡信息链表添加一个新的包含卡信息的结点,最后返回链表头指针; 。返回值:cardhead 。函数名:add_card 。形参表:struct card *newcard,*p1;int m; 。算法:开辟一个新结点:让newcard指向新结点,并令newcard -next为NULL; 输入新结点的数据域数据;判断原链表是否为空,若为空,则将newcard指向的结点插入到cardhead之后并置该结点指针域为NULL;否则将newcard指向的结点插入到链表尾结点。 if(cardhead-countmoneynext=NULL; /判断文件是否为空else p1=cardhead;while(p1-next!=NULL)p1=p1-next; /将结点插入链表p1-next=newcard;newcard-next=NULL;r查询卡函数 。功能:根据输入的卡号,查询卡号相同的卡信息,并以表格形式显示在控制台中 。返回值:cardhead 。函数名:query_card 。形参表:int j=1,n; struct card *p1;char cardnum40; 。算法:。定义1个struct card结构体指针变量p1,设置p初值为cardhead; 。根据卡号cardnum,从链表头开始顺序查找卡信息,直到找到或链表结束。 查找结点:描述如下while(p1!=NULL&strcmp(cardnum,p1-cardnum)!=0) p1=p1-next; /查找卡号所在结点显示数据:描述如下if(p1!=NULL)printf(%s%s%dn,p1-cardnum,p1-cardpassword,p1-money);r注销卡函数 。功能:根据输入的卡号,删除链表中指定位置的结点,最后返回链表头指针; 。返回值:cardhead 。函数名:delete_card 。形参表:int i=1,j=1,n;struct card *p1,*p2=NULL;char cardnum40,cardpassword40; 。算法:。定义2个struct card结构体指针变量p1和p2,设置p1初值为cardhead,p2 初值为NULL。 。根据卡号cardnum,从链表头开始顺序查找卡信息,直到找到或链表结束。查找结点:描述如下p1=cardhead; while(p1!=NULL&(n=cardnum-p1-cardnum)!=0)p2=p1;p1=p1-next;。删除结点:描述如下if(p1!=NULL)if(strcmp(p1-cardpassword,cardpassword)=0)if(strcmp(p1-cardnum,cardhead-cardnum)=0)cardhead=p1-next; /删除卡号所在结点 else p2-next=p1-next; free(p1); /释放空间 j+;else i+;if(j!=1)printf(注销成功!按回车键返回。);if(i!=1)printf(密码错误!按回车键返回。);if(p1=NULL)printf(操作失败!无此卡信息,按回车键返回。);r新增计费标准函数 。功能:在计费标准链表插入一个结点,最后返回链表头指针; 。返回值:standardhead 。函数名:add_charging_standard 。形参表:struct charging_standard *newstandard,*p1; 。算法: 开辟一个新结点:让newstandard指向新结点,并令newstandard -next为NULL; 输入新结点的数据域数据;判断原链表是否为空,若为空,则将newstandard指向的结点插入到cardhead之后并置该结点指针域为NULL;否则将newcard指向的结点插入到链表尾结点。用伪代码表示如下if(standardhead-numnext=NULL;else p1=standardhead;while(p1-next!=NULL)p1=p1-next;p1-next=newstandard;newstandard-next=NULL;r查询计费标准函数 。功能:读取计费标准文件中的数据,并且显示在控制台上。 。返回值:standardhead 。函数名:query_charging_standard 。形参表:struct charging_standard *p1; 。算法:定义1个struct charging_standard结构体指针变量p1,设置p初值为standardhead; 逐个显示计费标准直到链表结束。 用伪代码表示如下:while(p1-next!=NULL)printf(%d %s n,p1-num,p1-ch);p1=p1-next; r删除计费标准函数 。功能:根据输入的编号,删除链表中指定位置的结点,最后返回链表头指针。 。返回值:standardhead 。函数名:delete_charging_standard 。形参表:int j=1,n,num; struct charging_standard *p1,*p2=NULL; 。算法: 定义2个struct charging_standard结构体指针变量p1和p2,设置p1初值为cardhead,p2初值为NULL。 。根据编号num,从链表头开始顺序查找计费标准信息,直到找到或链表结束。查找结点:描述如下p1=standardhead; while(p1!=NULL&(n=num-p1-num)!=0)p2=p1;p1=p1-next;删除结点:描述如下if(p1!=NULL)if(p1-num=standardhead-num)standardhead=p1-next; else p2-next=p1-next; free(p1); j+; if(j!=1)printf(删除成功!按回车键返回。); if(p1=NULL)printf(操作失败!无计费标准信息,按回车键返回。);r修改计费标准函数 。功能:根据输入的编号,重新输入链表中指定位置的结点的数据域的数据,最后返回链表头指针。 。返回值:standardhead 。函数名:re_charging_standard 。形参表:int j=1,n,num; char ch200;struct charging_standard *p1,*p2=NULL; 。算法: 定义2个struct charging_standard结构体指针变量p1和p2,设置p1初值为cardhead,p2初值为NULL。定义char型变量储存新的计费标准。查找结点:描述如下p1=standardhead; while(p1!=NULL&(n=num-p1-num)!=0)p2=p1;p1=p1-next;修改数据域:描述如下p1=standardhead; while(p1!=NULL&(n=num-p1-num)!=0)p2=p1;p1=p1-next;if(p1!=NULL)strcpy(p1-ch,ch);j+;if(j!=1)printf(修改成功!按回车键返回。);if(p1=NULL)printf(操作失败!无此计费标准信息,按回车键返回。);r上机函数 。功能:根据输入的卡号,修改链表中指定位置的结点的数据域的数据,最后返回链表头指针。 。返回值:cardhead 。函数名:oncpt 。形参表:struct tm *local;int i=1,j=1,n;struct card *p1,*p2=NULL;char cardnum40,cardpassword40 。算法:定义int型变量cardnum,cardpassword,定义 2个struct card结构体指针变量p1,p2.定义时间结构体指针local 根据卡号和密码,判断是否能上机,若能上机则将记录当月上机次数的数据加1:描述如下p1=cardhead; while(p1!=NULL&(n=cardnum-p1-cardnum)!=0)p2=p1;p1=p1-next;if(p1!=NULL)if(p1-cardpassword=cardpassword)if(p1-money0)j+; p1-count=p1-count+1; time_t t; t=time(NULL); local=localtime(&t); p1-onlocal-tm_mon=p1-onlocal-tm_mon+1;else printf(该卡欠费%d元,请先缴纳欠费!按回车键返回。,-p1-money);else i+;if(j!=1)printf(登陆成功!按回车键返回。);if(i!=1)printf(密码错误!按回车键返回。);if(p1=NULL)printf(操作失败!无此卡信息,按回车键返回。);r下机函数 。功能:根据输入的卡号,修改链表中指定位置的结点的数据域的数据,最后返回链表头指针。 。返回值:cardhead 。函数名:offcpt 。形参表:struct tm *local;int i=1,j=1,n, money;int m;struct card *p1,*p2=NULL; char cardnum40; 。算法:定义char型数组变量卡号cardnum,消费金额money,定义 2个struct card结构体指针变量p1,p2.定义时间结构体指针local 根据卡号和消费金额,修改对应结点的消费金额和余额:描述如下 p1=cardhead; while(p1!=NULL&strcmp(cardnum,p1-cardnum)!=0) /查找卡所在结点p2=p1;p1=p1-next;if(p1!=NULL)if(p1-money=money) /判断余额是否足够p1-money=p1-money-money;j+;else m=money-p1-money;p1-money=p1-money-money;printf(余额不足!透支%d元!按回车键返回,m);p1-countmoney=p1-countmoney+money;time_t t; t=time(NULL); local=localtime(&t);p1-costlocal-tm_mon=p1-costlocal-tm_mon+money; /数组中与月份对应的一项的金额增加if(j!=1)printf(下机成功!按回车键返回。);if(p1=NULL)printf(操作失败!无此卡信息,按回车键返回。);r充值函数 。功能:根据输入的卡号,修改链表中指定位置的结点的数据域的数据,最后返回链表头指针。 。返回值:cardhead 。函数名:recharge 。形参表:int j=1,n, money1;struct card *p1; int cardnum40; 。算法:定义卡号cardnum,充值金额money1,定义struct card结构体指针变量p1; 根据卡号和充值金额,修改对应结点的余额:描述如下 while(p1!=NULL&strcmp(cardnum,p1-cardnum)!=0) /查找卡所在结点p1=p1-next;if(p1!=NULL)printf( - n); printf(|*|n); printf(|* *|n);printf(|* 卡号 余额 *|n);printf(|* %d %d *|n,p1-cardnum,p1-money);j+;if(j!=1)p1-money=p1-money+money1;printf(|* 充值成功! *|n);printf(|* 卡号 余额 *|n);printf(|* %d %d *|n,p1-cardnum,p1-money);printf(|* 按回车键返回。 *|n);printf(|* *|n); printf(|*|n); printf( - n);else printf(充值失败!无该卡信息,按回车键返回。n);r退费函数 。功能:根据输入的卡号,修改链表中指定位置的结点的数据域的数据,最后返回链表头指针。 。返回值:cardhead 。函数名:drawback 。形参表: int j=1,n ,money1;struct card *p1; char cardnum40; 。算法:定义卡号cardnum,退费金额money1,定义struct card结构体指针变量p1; 根据卡号和退费金额,修改对应结点的余额:描述如下p1=cardhead; while(p1!=NULL&strcmp(cardnum,p1-cardnum)!=0) /查找卡所在结点p1=p1-next;if(p1!=NULL)printf(n卡号 余额n);printf(%s %dn,p1-cardnum,p1-money); /输出结点数据域的数据j+;if(j!=1)if(p1-money=money1)p1-money=p1-money-money1; printf(退款成功!n); printf(n卡号 余额n); printf(%s %dn,p1-cardnum,p1-money); printf(按任意键返回。n);else printf(退款失败!余额不足!n);else printf(退款失败!无该卡信息,按回车键返回。n);r查询消费记录函数 。功能:根据输入的卡号、起始月份、结束月份,显示一张卡在一段时间内的消费情况 。返回值:无 。函数名:query_cost_record 。形参表: int n,m,i,j=0;struct card *p1; char cardnum40; 。算法:定义int型变量起始月份m,结束月份n,卡号cardnum,定义struct card结构体指针变量p1, 根据输入的起始月份和结束月份以及卡号,输出对应的结点在对应时间段的消费记录:描述如下 查找结点:while(p1!=NULL&strcmp(cardnum,p1-cardnum)!=0) p1=p1-next;输出结果:if(p1!=NULL)printf(|*月份 月上机次数 月消费金额*|n);for(i=m;ioni-1,p1-costi-1 );j+;if(j=0)printf(查询失败!请重新检查卡号,按回车键返回。);r统计总营业额函数 。功能:根据输入的起始月份、结束月份,显示在一段时间内的总营业额情况 。返回值:无 。函数名:query_countmoney。形参表:int n,m,i,countmoney=0;struct card *p1; 。算法:定义int型变量起始月份m,结束月份n,定义struct card结构体指针变量p1, 根据输入的起始月份和结束月份,将对应的结点在对应时间段的营业额累计并输出:描述如下 p1=cardhead;查找并累计:if(cardhead-cardnumnext!=NULL) for(i=m;icosti-1; p1=p1-next;输出结果:printf(|* %d月月头至%d月月尾总营业额为%d元。 *|n,m,n,countmoney);r统计一年各月营
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年事业单位工勤技能考试模拟试题【轻巧夺冠】附答案详解
- 2024自考专业(人力资源管理)通关考试题库附参考答案详解(轻巧夺冠)
- 2024烟草职业技能鉴定考前冲刺测试卷及完整答案详解【考点梳理】
- 公务员(国考)考试彩蛋押题附答案详解(培优B卷)
- 2025年中考数学总复习《分式》模拟试题【综合题】附答案详解
- 2024-2025学年度自考专业(计算机信息管理)考试黑钻押题含完整答案详解【必刷】
- 执业药师之《西药学专业一》复习试题附答案详解【研优卷】
- 2025农村信用社招聘考试试卷及答案详解【典优】
- 2025收银审核员真题含完整答案详解(易错题)
- 忆阻器混沌系统动力学分析与同步控制研究
- 2025-2030滑雪培训行业市场发展分析及前景趋势预测与投资可行性评估报告
- 课堂高效学习的主阵地 教学设计-2023-2024学年高中上学期主题班会
- 2025年放射工作人员培训考试试题(附答案)
- 高考熟词生义解密(复习讲义)-2026年高考英语一轮复习(北京专用)挖空版
- 2025年北京市中考英语试卷(含答案与解析)
- 浙江名校协作体(G12)2025年9月2026届高三返校联考英语(含答案)
- 2025年环保法律法规基础知识考试卷及答案
- 2026届新人教版高考物理一轮复习讲义:静电场及其应用(含答案)
- 检测基础知识培训课件
- 采购管理大师谢勤龙讲义《供应链管理的问题多多与解决之道》
- 国企招聘笔试题及答案-投资专员、投资经理B卷
评论
0/150
提交评论