武汉理工大学计算机基础与编程综合实验——网吧计费管理系统第二个版本

本文档介绍了武汉理工大学计算机基础与编程综合实验的第二个版本——基于链表实现的网吧计费管理系统。系统实现了卡信息链表操作,如添加、显示和检查卡是否存在,以及上机下机功能,包括上机验证、计费记录管理和下机结算。实验详细阐述了各个功能的实现代码,包括model.h、AMS.cpp、cardList.cpp和service.cpp等文件的使用。
摘要由CSDN通过智能技术生成


前言

第4次:改写第3次实验内容
文件 <-> 链表<-> 系统的操作
第5-7次:在第4次实验基础上,完成全部功能,是基于链表的

系统需求分析和注意事项

详情可参考前一篇文章:
传送门:武汉理工大学计算机基础与编程综合实验——网吧计费管理系统第一个版本


以下是本篇文章正文内容,下面案例可供参考

具体实现(链表基本操作)

model.h

定义卡信息链表结点类型。

struct CardNode
{
   
	Card data;//结点数据
	struct CardNode* next;//指向下个结点的指针
}

AMS.cpp

定义链表表头指针。

CardNode* pCardNodeHead=NULL;
pCardNodeHead=CardListInit(CARDPATH);

cardList.cpp

CardListInit()

为了对比容器 vector 和链表 list 的操作,我们使用 cardList.cpp 和 cardList.h 文件来存放对卡 card 的基本操作。

CardNode* CardListInit(const string cardFilename)
{
   
ifstream cardfile(cardFilename);
 CardNode *pCardNode, *pCardNodeHead, *pCardNodeTail;
 Card card;
 if(!cardfile.is_open())
 {
   
 return NULL;
 }
pCardNodeHead = NULL;
pCardNodeTail = NULL;
 while(1)
 {
   
 cardfile.read((char*)&card, sizeof(Card));
 if(cardfile.eof())
 {
   
 break;
 }
 pCardNode = new CardNode;
 pCardNode->data = card;
 if(pCardNodeHead == NULL)
 {
   
 pCardNodeHead = pCardNode;
 pCardNodeTail = pCardNode;
 }
 else
 {
   
 pCardNodeTail->next = pCardNode;
 pCardNodeTail = pCardNode;
 }
 }
 pCardNodeTail->next = NULL;
 cardfile.close();
return pCardNodeHead;
}

addNewCard()

int addNewCard(string strNo, string strPwd, float fBalance, CardNode**
ppCardNodeHead)
{
   
int nCardIndex=0;
 if(cardIsExist(strNo, nCardIndex, *ppCardNodeHead) != NULL)
 {
   
 return FINDCARD;
 }
 Card card;
 strcpy(card.aName, strNo.c_str());
 strcpy(card.aPwd, strPwd.c_str());
 card.fBalance = fBalance;
// 添加新卡时,累计金额等于开卡金额
 card.fTotalUse = card.fBalance;
card.nStatus = UNUSE; // 卡状态
card.nUseCount = 0; // 使用次数
// 开卡时间,最后使用时间都默认为当前时间
card.tStart = card.tLast = time(NULL);
CardNode* pCardNode = new CardNode;
pCardNode->data = card;
CardNode *pCardNodeHead=*ppCardNodeHead;
CardNode *pCardNodeTail=*ppCardNodeHead;
if(pCardNodeHead == NULL)
{
   
// 第一张卡,通过ppCardNodeHead将表态指针返回
 pCardNodeHead = pCardNode;
 pCardNodeTail = pCardNode;
*ppCardNodeHead = pCardNode;
}
else
 {
   
 pCardNodeTail = pCardNodeHead;
 while(pCardNodeTail->next != NULL)
 pCardNodeTail = pCardNodeTail->next;
 pCardNodeTail->next = pCardNode;
pCardNodeTail = pCardNode;
 }
 pCardNodeTail->next = NULL;
 saveCard(&card, CARDPATH);
 return SUCCESS;
}

displayCard()

void displayCard(CardNode* pCardNodeHead)
{
   
if(pCardNodeHead == NULL)
 {
   
 cout << endl << endl <<"一张上机卡都没有!" << endl << endl;
 return;
 }
 cout << "卡号\t状态\t余额\t累计使用\t使用次数\t上次使用时间" << endl;
 CardNode* pCur = pCardNodeHead;
 while(pCur != NULL)
 {
   
 char aLastTime[TIMELENGTH] = {
   0};
 //char* aLastTime=NULL;
 timeToString((pCur->data).tLast, aLastTime);
 cout << pCur->data.aName << "\t" ;
 if(pCur->data.nStatus == USING)
 cout << "上机\t";
 else if(pCur->data.nStat
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值