1、机房收费管理系统程序设计基础课程设计大学论文东 莞 理 工 学 院课程设计报告课程名称 程序设计基础课程设计 题 目 机房收费管理系统 院系名称 计算机学院 专业班级 计科1班 学生学号 学生姓名 指导教师 完成时间 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*卡管理*添加卡输入卡号、密码、开卡金额
2、等卡信息,将卡信息保存到data文件夹的card.txt文件中2*查询卡根据输入的卡号,查询卡号相同的卡信息,并以表格形式显示在控制台中3*注销卡根据输入的卡号、密码,将对应卡的状态改为注销,注销卡不能进行上机4计费标准管理新增计费标准输入计费标准的信息,将输入的计费标准保存到data文件夹的rate.txt文件中5查询计费标准根据上机时间,查询对应的计费标准6删除计费标准从计费标准文件data文件夹的rate.txt文件中,删除一条计费标准7修改计费标准修改一条计费标准8计费管理上机根据输入的卡号、密码,判断该卡能否上机,如果能上机,则保存计费信息9下机根据输入下机卡的卡号,进行下机结算操作
3、10*费用管理*充值给一条已经存在的卡进行充值。11*退费将卡中余额返回给用户12查询统计查询消费记录查询一张卡在一段时间内的消费记录13统计总营业额统计一段时间内,总营业额14统计月营业额统计一年中,每个月上机次数、总营业额,将统计结果保存到文本文件中,并以列表形式显示在控制台中。15权限管理*添加管理员超级管理员添加一个管理员信息16*删除管理员超级管理员删除一个管理员信息17配置权限添加管理员时,配置管理员的权限18*系统*登录超级管理员和管理员登录系统19*退出超级管理员和管理员退出系统12 数据需要分析卡数据、管理员数据、计费标准数据是系统管理的主要数据,包括卡号、密码、余额、管理员
4、账号、管理员密码、管理员权限、计费标准。2系统设计21 函数调用关系设计系统分为六个模块,分别为卡管理、费用管理、权限管理、计费标准管理、计费管理、查询统计六个模块,每个模块分为2或3个子模块,每个子模块完成一项功能22 函数设计 主函数。功 能:读取文件信息,建立卡信息链表、管理员信息、计费标准链表。判断管理员类型。实现菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单。返回值:void。函数名:main。形参表: FILE *fp; struct card *cardhead=NULL,*p3,*p4=NULL; struct manager *managerhead=NULL,*p1,
5、*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均指向
6、首结点,否则,把p1指向的新结点连接到表尾(则p2-next=p1)。令p2指向新的表尾结点。 以相同方式建立管理员信息链表和计费标准链表。依据输入的管理员类型判断是否与管理员信息链表中的信息相符,相符则依据管理员类型显示不同的菜单功能,不相符则返回。主函数提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数card_manage(cardhead); cost_manage(cardhead); power_manage(managerhead)、standard_manage(standardhea)、count_cost_manage(cardhead)、query_
7、count(cardhead); ),直到选择“退出”为止。由于循环次数未知,选while语句实现。算法用类while结构描述如下:while(1) 显示菜单; 输入菜单选项; 选择执行菜单:即分支调用input_score()、edit_score()、del_score()、count_sel()、print_sorce()或退出; 卡管理函数。功能:实现菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单。返回值:无。函数名:card_manage。形参表:sel。算法:提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数提供菜单功能,即循环显示菜单、输入菜单选项、选
8、择执行菜单(即分支调用函数add_card(cardhead);、 query_card(cardhead); 、delete_card(cardhead); ),直到选择“退出”为止。由于循环次数未知,一般选while语句实现。算法用类while结构描述如下:while(1) 显示菜单; 输入菜单选项; 选择执行菜单:即分支调用add_card(cardhead);、 query_card(cardhead); 、delete_card(cardhead); 或退出; 权限管理函数。功能:实现菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单。返回值:无。函数名:power_manage。
9、形参表:sel。算法:提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数add_manager(managerhead); 、delete_manage(managerhead); ),直到选择“退出”为止。由于循环次数未知,一般选while语句实现。算法用类while结构描述如下:while(1) 显示菜单; 输入菜单选项; 选择执行菜单:即分支调用add_manager(managerhead); 、delete_manage(managerhead); 或退出; 费用管理函数。功能:实现菜单功能
10、,即循环显示菜单、输入菜单选项、选择执行菜单。返回值:无。函数名:cost_manage。形参表:sel。算法:提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数recharge(cardhead); 、drawback(cardhead); ),直到选择“退出”为止。由于循环次数未知,一般选while语句实现。算法用类while结构描述如下:while(1) 显示菜单; 输入菜单选项; 选择执行菜单:即分支调用recharge(cardhead); 、drawback(cardhead); 或退出;
11、 计费管理函数。功能:实现菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单。返回值:无。函数名:count_cost_manage。形参表:sel。算法:提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数oncpt(cardhead); 、offcpt(cardhead); ),直到选择“退出”为止。由于循环次数未知,一般选while语句实现。算法用类while结构描述如下:while(1) 显示菜单; 输入菜单选项; 选择执行菜单:即分支调用oncpt(cardhead); 、offcpt(ca
12、rdhead); 或退出; 查询统计函数。功能:实现菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单。返回值:无。函数名:query_count。形参表:sel。算法:提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数query_cost_record(cardhead)、query_countmoney(cardhead)、count_year_money(cardhead); ),直到选择“退出”为止。由于循环次数未知,一般选while语句实现。算法用类while结构描述如下:while(1)
13、 显示菜单; 输入菜单选项; 选择执行菜单:即分支调用query_cost_record(cardhead)、query_countmoney(cardhead)、count_year_money(cardhead); 或退出; 计费标准管理函数。功能:实现菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单。返回值:无。函数名:standard_manage。形参表:sel。算法:提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数query_charging_standard(standardhea
14、d);、add_charging_standard(standardhead);、delete_charging_standard(standardhead);、re_charging_standard(standardhead); ),直到选择“退出”为止。由于循环次数未知,一般选while语句实现。算法用类while结构描述如下:while(1) 显示菜单; 输入菜单选项; 选择执行菜单:即分支调用query_charging_standard(standardhead)、add_charging_standard(standardhead)、delete_charging_standar
15、d(standardhead)、re_charging_standard(standardhead) 或退出; 计费标准管理函数。功能:实现菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单。返回值:无。函数名:standard_manage。形参表:sel。算法:提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数query_charging_standard(standardhead);、add_charging_standard(standardhead);、delete_charging_st
16、andard(standardhead);、re_charging_standard(standardhead); ),直到选择“退出”为止。由于循环次数未知,一般选while语句实现。算法用类while结构描述如下:while(1) 显示菜单; 输入菜单选项; 选择执行菜单:即分支调用query_charging_standard(standardhead)、add_charging_standard(standardhead)、delete_charging_standard(standardhead)、re_charging_standard(standardhead) 或退出;添加卡函
17、数 。功能:向卡信息链表添加一个新的包含卡信息的结点,最后返回链表头指针; 。返回值:cardhead 。函数名:add_card 。形参表: struct card *newcard,*p1;int m; 。算法:开辟一个新结点:让newcard指向新结点,并令newcard -next为NULL; 输入新结点的数据域数据;判断原链表是否为空,若为空,则将newcard指向的结点插入到cardhead之后并置该结点指针域为NULL;否则将newcard指向的结点插入到链表尾结点。 if(cardhead-countmoneynext=NULL; /判断文件是否为空 else p1=cardh
18、ead; while(p1-next!=NULL)p1=p1-next; /将结点插入链表 p1-next=newcard; newcard-next=NULL;查询卡函数 。功能:根据输入的卡号,查询卡号相同的卡信息,并以表格形式显示在控制台中 。返回值:cardhead 。函数名:query_card 。形参表:int j=1,n; struct card *p1;char cardnum40; 。算法:。定义1个struct card结构体指针变量p1,设置p初值为cardhead; 。根据卡号cardnum,从链表头开始顺序查找卡信息,直到找到或链表结束。 查找结点:描述如下while
19、(p1!=NULL&strcmp(cardnum,p1-cardnum)!=0) p1=p1-next; /查找卡号所在结点 显示数据:描述如下if(p1!=NULL)printf(%s%s%dn,p1-cardnum,p1-cardpassword,p1-money);注销卡函数 。功能:根据输入的卡号,删除链表中指定位置的结点,最后返回链表头指针; 。返回值:cardhead 。函数名:delete_card 。形参表:int i=1,j=1,n;struct card *p1,*p2=NULL;char cardnum40,cardpassword40; 。算法:。定义2个struct
20、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; /删除卡号所在结点
21、 else p2-next=p1-next; free(p1); /释放空间 j+; else i+; if(j!=1)printf(注销成功!按回车键返回。); if(i!=1)printf(密码错误!按回车键返回。); if(p1=NULL)printf(操作失败!无此卡信息,按回车键返回。);新增计费标准函数 。功能:在计费标准链表插入一个结点,最后返回链表头指针; 。返回值:standardhead 。函数名:add_charging_standard 。形参表:struct charging_standard *newstandard,*p1; 。算法: 开辟一个新结点:让newst
22、andard指向新结点,并令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; 查询计费标准函数 。功能:读取计费标准文件中的数据,并且显示
23、在控制台上。 。返回值: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; 删除计费标准函数 。功能:根据输入的编号,删除链表中指定位置的结点,最后返回链表头指针。 。返回值:standardh
24、ead 。函数名: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!=N
25、ULL) if(p1-num=standardhead-num)standardhead=p1-next; else p2-next=p1-next; free(p1); j+; if(j!=1)printf(删除成功!按回车键返回。); if(p1=NULL)printf(操作失败!无计费标准信息,按回车键返回。);修改计费标准函数 。功能:根据输入的编号,重新输入链表中指定位置的结点的数据域的数据,最后返回链表头指针。 。返回值:standardhead 。函数名:re_charging_standard 。形参表: int j=1,n,num; char ch200; struct ch
26、arging_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(p
27、1-ch,ch); j+; if(j!=1)printf(修改成功!按回车键返回。); if(p1=NULL)printf(操作失败!无此计费标准信息,按回车键返回。);上机函数 。功能:根据输入的卡号,修改链表中指定位置的结点的数据域的数据,最后返回链表头指针。 。返回值:cardhead 。函数名:oncpt 。形参表: struct tm *local; int i=1,j=1,n; struct card *p1,*p2=NULL;char cardnum40,cardpassword40 。算法:定义int型变量cardnum,cardpassword,定义 2个struct car
28、d结构体指针变量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!=
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1