机房收费管理系统《程序设计基础ⅱ》课程设计大学论文.docx

上传人:b****6 文档编号:8892668 上传时间:2023-02-02 格式:DOCX 页数:91 大小:269.86KB
下载 相关 举报
机房收费管理系统《程序设计基础ⅱ》课程设计大学论文.docx_第1页
第1页 / 共91页
机房收费管理系统《程序设计基础ⅱ》课程设计大学论文.docx_第2页
第2页 / 共91页
机房收费管理系统《程序设计基础ⅱ》课程设计大学论文.docx_第3页
第3页 / 共91页
机房收费管理系统《程序设计基础ⅱ》课程设计大学论文.docx_第4页
第4页 / 共91页
机房收费管理系统《程序设计基础ⅱ》课程设计大学论文.docx_第5页
第5页 / 共91页
点击查看更多>>
下载资源
资源描述

机房收费管理系统《程序设计基础ⅱ》课程设计大学论文.docx

《机房收费管理系统《程序设计基础ⅱ》课程设计大学论文.docx》由会员分享,可在线阅读,更多相关《机房收费管理系统《程序设计基础ⅱ》课程设计大学论文.docx(91页珍藏版)》请在冰豆网上搜索。

机房收费管理系统《程序设计基础ⅱ》课程设计大学论文.docx

机房收费管理系统《程序设计基础ⅱ》课程设计大学论文

东莞理工学院

课程设计报告

 

课程名称《程序设计基础Ⅱ》课程设计

题目机房收费管理系统

 

院系名称计算机学院

专业班级计科1班

学生学号

学生姓名

指导教师

完成时间

1、系统分析………………………………………………………………………………………

1.1功能需求分析………………………………………………………………………………

1.2数据需求分析………………………………………………………………………………

2、系统设计………………………………………………………………………………………

2.1函数调用关系设计…………………………………………………………………………

2.2函数设计……………………………………………………………………………………

3、系统编码…………………………………………………………………………………………

3.1程序文件模块……………………………………………………………………………

3.2程序代码…………………………………………………………………………………

4、系统调试与运行…………………………………………………………………………………

5、总结……………………………………………………………………………………………

5.1自我评价及收获……………………………………………………………………………

5.2有待解决的问题及进一步完善的思路……………………………………………………

6、参考文献…………………………………………………………………………………………

 

1.系统分析

1.1功能需要分析

开发设计一个机房收费管理软件,要求系统具有如下功能:

功能介绍

序号

模块

功能

说明

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

*退出

超级管理员和管理员退出系统

 

1.2数据需要分析

卡数据、管理员数据、计费标准数据是系统管理的主要数据,包括卡号、密码、余额、管理员账号、管理员密码、管理员权限、计费标准。

2.系统设计

2.1函数调用关系设计

系统分为六个模块,分别为卡管理、费用管理、权限管理、计费标准管理、计费管理、查询统计六个模块,每个模块分为2或3个子模块,每个子模块完成一项功能

2.2函数设计

主函数

功能:

读取文件信息,建立卡信息链表、管理员信息、计费标准链表。

判断管理员类型。

实现菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单。

返回值:

void

函数名:

main

形参表:

FILE*fp;

structcard*cardhead=NULL,*p3,*p4=NULL;

structmanager*managerhead=NULL,*p1,*p2=NULL;

structcharging_standard*standardhead=NULL,*p5,*p6=NULL;

intl=0,n,i=1,j=1,sel,flag=0,m,f,index;

charmanagernum[40],password[40];

算法:

定义文件指针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){

显示菜单;

输入菜单选项;

选择执行菜单:

即分支调用input_score()、edit_score()、del_score()、count_sel()、print_sorce()或退出;

}

卡管理函数

功能:

实现菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单。

返回值:

函数名:

card_manage

形参表:

sel

算法:

提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数add_card(cardhead);、query_card(cardhead);、delete_card(cardhead);),直到选择“退出”为止。

由于循环次数未知,一般选while语句实现。

算法用类while结构描述如下:

while

(1){

显示菜单;

输入菜单选项;

选择执行菜单:

即分支调用add_card(cardhead);、query_card(cardhead);、delete_card(cardhead);或退出;

}

权限管理函数

功能:

实现菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单。

返回值:

函数名:

power_manage

形参表:

sel

算法:

提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数add_manager(managerhead);、delete_manage(managerhead);),直到选择“退出”为止。

由于循环次数未知,一般选while语句实现。

算法用类while结构描述如下:

while

(1){

显示菜单;

输入菜单选项;

选择执行菜单:

即分支调用add_manager(managerhead);、delete_manage(managerhead);或退出;

}

费用管理函数

功能:

实现菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单。

返回值:

函数名:

cost_manage

形参表:

sel

算法:

提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数recharge(cardhead);、drawback(cardhead);),直到选择“退出”为止。

由于循环次数未知,一般选while语句实现。

算法用类while结构描述如下:

while

(1){

显示菜单;

输入菜单选项;

选择执行菜单:

即分支调用recharge(cardhead);、drawback(cardhead);;或退出;

}

计费管理函数

功能:

实现菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单。

返回值:

函数名:

count_cost_manage

形参表:

sel

算法:

提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数oncpt(cardhead);、offcpt(cardhead);),直到选择“退出”为止。

由于循环次数未知,一般选while语句实现。

算法用类while结构描述如下:

while

(1){

显示菜单;

输入菜单选项;

选择执行菜单:

即分支调用oncpt(cardhead);、offcpt(cardhead);或退出;

}

查询统计函数

功能:

实现菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单。

返回值:

函数名:

query_count

形参表:

sel

算法:

提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数query_cost_record(cardhead)、query_countmoney(cardhead)、count_year_money(cardhead);),直到选择“退出”为止。

由于循环次数未知,一般选while语句实现。

算法用类while结构描述如下:

while

(1){

显示菜单;

输入菜单选项;

选择执行菜单:

即分支调用query_cost_record(cardhead)、query_countmoney(cardhead)、count_year_money(cardhead);或退出;

}

计费标准管理函数

功能:

实现菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单。

返回值:

函数名:

standard_manage

形参表:

sel

算法:

提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数query_charging_standard(standardhead);、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_standard(standardhead)、re_charging_standard(standardhead)或退出;

}

计费标准管理函数

功能:

实现菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单。

返回值:

函数名:

standard_manage

形参表:

sel

算法:

提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数提供菜单功能,即循环显示菜单、输入菜单选项、选择执行菜单(即分支调用函数query_charging_standard(standardhead);、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_standard(standardhead)、re_charging_standard(standardhead)或退出;

}

添加卡函数

功能:

向卡信息链表添加一个新的包含卡信息的结点,最后返回链表头指针;

返回值:

cardhead

函数名:

add_card

形参表:

structcard*newcard,*p1;

intm;

算法:

开辟一个新结点:

让newcard指向新结点,并令newcard->next为NULL;

输入新结点的数据域数据;

判断原链表是否为空,若为空,则将newcard指向的结点插入到cardhead之后并置该结点指针域为NULL;否则将newcard指向的结点插入到链表尾结点。

if(cardhead->countmoney<0){cardhead=newcard;cardhead->next=NULL;}//判断文件是否为空

else{

p1=cardhead;

while(p1->next!

=NULL)p1=p1->next;//将结点插入链表

p1->next=newcard;

newcard->next=NULL;

查询卡函数

功能:

根据输入的卡号,查询卡号相同的卡信息,并以表格形式显示在控制台中

返回值:

cardhead

函数名:

query_card

形参表:

intj=1,n;

structcard*p1;

charcardnum[40];

算法:

定义1个structcard结构体指针变量p1,设置p初值为cardhead;

根据卡号cardnum,从链表头开始顺序查找卡信息,直到找到或链表结束。

查找结点:

描述如下while(p1!

=NULL&&strcmp(cardnum,p1->cardnum)!

=0){

p1=p1->next;//查找卡号所在结点

}

显示数据:

描述如下if(p1!

=NULL)printf("%s%s%d\n",p1->cardnum,p1->cardpassword,p1->money);

注销卡函数

功能:

根据输入的卡号,删除链表中指定位置的结点,最后返回链表头指针;

返回值:

cardhead

函数名:

delete_card

形参表:

inti=1,j=1,n;

structcard*p1,*p2=NULL;

charcardnum[40],cardpassword[40];

算法:

定义2个structcard结构体指针变量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;////删除卡号所在结点

elsep2->next=p1->next;

free(p1);//释放空间

j++;

}

elsei++;

}

if(j!

=1)printf("注销成功!

按回车键返回。

");

if(i!

=1)printf("密码错误!

按回车键返回。

");

if(p1==NULL)printf("操作失败!

无此卡信息,按回车键返回。

");

新增计费标准函数

功能:

在计费标准链表插入一个结点,最后返回链表头指针;

返回值:

standardhead

函数名:

add_charging_standard

形参表:

structcharging_standard*newstandard,*p1;

算法:

开辟一个新结点:

让newstandard指向新结点,并令newstandard->next为NULL;

输入新结点的数据域数据;

判断原链表是否为空,若为空,则将newstandard指向的结点插入到cardhead之后并置该结点指针域为NULL;否则将newcard指向的结点插入到链表尾结点。

用伪代码表示如下if(standardhead->num<0){standardhead=newstandard;standardhead->next=NULL;}

else{

p1=standardhead;

while(p1->next!

=NULL)p1=p1->next;

p1->next=newstandard;

newstandard->next=NULL;

}

查询计费标准函数

功能:

读取计费标准文件中的数据,并且显示在控制台上。

返回值:

standardhead

函数名:

query_charging_standard

形参表:

structcharging_standard*p1;

算法:

定义1个structcharging_standard结构体指针变量p1,设置p初值为standardhead;

逐个显示计费标准直到链表结束。

用伪代码表示如下:

while(p1->next!

=NULL){

printf("%d%s\n",p1->num,p1->ch);

p1=p1->next;

}

删除计费标准函数

功能:

根据输入的编号,删除链表中指定位置的结点,最后返回链表头指针。

返回值:

standardhead

函数名:

delete_charging_standard

形参表:

intj=1,n,num;

structcharging_standard*p1,*p2=NULL;;

算法:

定义2个structcharging_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;

elsep2->next=p1->next;

free(p1);

j++;

}

if(j!

=1)printf("删除成功!

按回车键返回。

");

if(p1==NULL)printf("操作失败!

无计费标准信息,按回车键返回。

");

修改计费标准函数

功能:

根据输入的编号,重新输入链表中指定位置的结点的数据域的数据,最后返回链表头指针。

返回值:

standardhead

函数名:

re_charging_standard

形参表:

intj=1,n,num;

charch[200];

structcharging_standard*p1,*p2=NULL;

算法:

定义2个structcharging_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("操作失败!

无此计费标准信息,按回车键返回。

");

上机函数

功能:

根据输入的卡号,修改链表中指定位置的结点的数据域的数据,最后返回链表头指针。

返回值:

cardhead

函数名:

oncpt

形参表:

structtm*local;

inti=1,j=1,n;

structcard*p1,*p2=NULL;

charcardnum[40],cardpassword[40]

算法:

定义int型变量cardnum,cardpassword,定义2个structcard结构体指针变量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->money>0){

j++;

p1->count=p1->count+1;

time_tt;

t=time(NULL);

local=localtime(&t);

p1->on[local->tm_mon]=p1->on[local->tm_mon]+1;

}

elseprintf("该卡欠费%d元,请先缴纳欠费!

按回车键返回。

",-p1->money);

}

elsei++;

}

if(j!

=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1