学号
《计算机基础与综合编程实验》报告
学 院
计算机科学与技术学院
专 业
班 级
姓 名
指导教师
日期
1 实验目的
通过迭代式开发,深入掌握 C 语言的文件、链表、结构体、动态内存管理等
技术,开发实现一个计费管理软件。
计费软件背景:计费管理系统是一个计费平台,按时间计费,用卡消费。 可
应用于网吧、学校机房、学校电子阅览室等。除多样化、灵活的计费形式外, 本
系统还可进行修改相关卡信息、费用信息,且具有查询统计、系统管理等功能。
2 系统功能与描述
项目功能包括:对计费系统平台的用户进行管理,每个用户对应一张卡,功
能有卡的添加、查询、注销功能,上机、下机功能,充值、退费功能,密码查询、
修改功能,查询功能(输出查询卡的所有卡信息),统计功能(输出卡信息数量、
计费信息数量)。
·添加卡
输入卡号、密码,开卡金额。
将用户账户的卡信息保存到卡信息结构体,添加到相应路径下保存卡信息的文本
文件的末尾。保存失败,则显示“添加失败!”;保存成功,则显示“添加成功!”,
并显示添加卡的卡号、密码、状态、开卡金额。
考虑到一次添加多个用户账户,添加卡成功后,利用 switch-case 函数可选择返
回主菜单、继续添加卡或是退出系统。
【技术实现】:while 循环,指针变量的初始化及使用,字符串拷贝函数 strcop(),
头文件 time.h 相关变量、函数的使用,将卡信息写入文本文件。
1
·查询卡
输入查询卡的卡号,判断长度符合要求后,选择查询方式(精准查询、模糊查询)
进行查询卡并输出查询到的卡信息。
将文本文件中的用户账户信息即卡信息,利用 getCard()函数保存到链表
CardList。保存到链表时调用 getCardCount()函数获取卡信息数量,便于动态
分配内存;调用 readCard()函数读取卡信息,读取卡信息时用到 praseCard()
函数解析文本文件。
精准查询:根据输入的卡号,利用 while 循环遍历链表,在卡信息链表 CardList
中查询卡号相同的结点,返回结点中的卡信息。
模糊查询:输入的卡号作为查询的关键字,根据输入的关键字,进行模糊查询。
遍历链表,利用函数 strstr()判断卡号中有无输入的关键字。若找到则将该卡
的卡信息一次保存到卡信息结构体中,返回卡信息结构体。
【技术实现】:字符串拷贝函数 strcpy(),字符串比较函数 strcmp(),头文件
time.h 相关变量、函数的使用,时间类型转换为字符串,将文本文件的信息解析
后写入链表,匹配信息并输出查询到的卡信息。
·上机
输入要上机的卡号、密码。
2
将文本文件中的用户账户信息即卡信息,保存到链表,保存过程同查询卡。
根据输入的卡号、密码,遍历链表,找到相应的卡信息并保存到变量中。未找到
或卡号与密码不匹配,则输出“无该卡信息 上机失败”。
找到卡信息,判断该卡是否符合上机条件。要求卡状态为未上机,否则输出“该
卡正在上机、已经注销或失效 上机失败”;卡余额大于零,否则输出“余额不
足 上机失败”。
符合上机条件,更新卡信息,将计费信息保存到计费信息结构体、计费信息文本
文件。保存成功则输出“上机成功”并输出上级卡的卡号、余额、上机时间。否
则输出“上机失败”。
【技术实现】:将文本文件的信息解析后写入链表。文本文件的打开、读写、关
闭。匹配信息并输出上机成功的卡信息。
·下机
3
输入要上机的卡号、密码。
将文本文件中的用户账户信息即卡信息,保存到链表 CardList,保存过程同查
询卡。
根据输入的卡号、密码,遍历链表,找到相应的卡信息并保存到相应的变量中。
未找到或卡号与密码不匹配,则输出“无该卡信息 下机失败”。
找到卡信息,判断该卡是否符合下机条件。卡状态为正在上机,否则输出“该卡
未上机、已经注销或失效 下机失败”;计算消费金额,若卡余额少于消费金额,
则输出“余额不足 下机失败”。
更新卡信息、计费信息,保存计费信息到计费信息结构体、计费信息文本文件。
保存失败则输出“下机失败”。
下机成功,输出下机信息,即下机卡的卡号、消费金额、余额、上机时间、下机
时间。
【技术实现】:将文本文件的信息解析后写入链表。文本文件的打开、读写、关
闭。匹配信息并输出下机成功的卡信息。
·充值
输入充值卡卡号、密码。
将文本文件中的用户账户信息即卡信息,保存到链表,保存过程同查询卡。
4
根据输入的卡号、密码,遍历链表,找到相应的卡信息并保存到变量中。
判断该卡是否可以充值。要求卡状态为未使用或正在使用。不符合输出“充值失
败”。
若可以充值,输入充值金额计算优惠后的金额作为卡余额。
更新卡信息结构体,更新、保存文本文件中的卡信息和二进制文件中的充值记录
信息。若更新、保存则输出“充值失败!”,否则输出“充值成功!”。
【技术实现】:二进制文件、文本文件的读写操作。信息的匹配。
·退费
输入退费卡卡号、密码。
将文本文件中的用户账户信息即卡信息,保存到链表,保存过程同查询卡。
根据输入的卡号、密码,遍历链表,找到相应的卡信息并保存到变量中。
判断该卡可否退费。要求卡状态为未使用且卡余额大于 0。不符合则输出“退费
失败”。
若可以退费,输出退费金额,更新链表中的信息、卡信息文件信息,保存退费记
录。输出“退费成功!”。
否则,输出“退费失败!”。
【技术实现】:二进制文件、文本文件的读写操作。信息的匹配及输出。
5
·注销卡
判断管理员用户名、密码正确,获得注销卡的使用权限。
输入注销卡卡号、密码。
将文本文件中的用户账户信息即卡信息,保存到链表,保存过程同查询卡。
根据输入的卡号、密码,遍历链表,找到相应的卡信息并保存到变量中。
判断可否注销。要求卡状态为未上机,且卡余额大于 0。
若可注销,输出卡号和退款金额。
更新链表中的信息、卡信息文件中的卡信息,输出“注销成功”。
【技术实现】:将文本文件的信息解析、保存到链表。字符串比较函数。文本文
件的打开、读写、关闭。信息的匹配与输出。
---------------------------------------------------------------------
以上为该项目的基本功能。
除了基本功能,还添加了几项特色功能:开卡优惠,充值优惠,查询密码,修改
密码,管理员权限的设置,查询统计文件中卡信息、计费信息的数目。
---------------------------------------------------------------------
·特色功能①:开卡优惠
6
添加卡信息时,输入开卡金额,每一百元送五十元。计算得到输入的开卡金额是
100的整数倍,将倍数乘50加到原金额上,计算得到优惠后的金额作为卡信
息中的余额。
【技术实现】:数值运算。更新文件中的信息。
·特色功能②:充值优惠
充值卡时,输入充值金额后,每一百元送五十元。计算得到输入的充值金额是
100 的整数倍,倍数*20+输入充值金额+原余额所得,作为卡信息的余额。
【技术实现】:数值运算。更新文件中的信息。
7