600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 【归档】网吧计费管理系统 C语言实现

【归档】网吧计费管理系统 C语言实现

时间:2022-12-07 22:11:27

相关推荐

【归档】网吧计费管理系统 C语言实现

网吧计费管理系统

main.c

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include"menu.h"#include"model.h"int main() {int nSelection = -1;//输入菜单项编号printf("\n 欢迎进入计费管理系统\n");do {outputMenu();//输出系统菜单nSelection = -1;//该循环用来解决输入字符(串)后会进入死循环的问题while (scanf("%d", &nSelection) != 1) {//scanf函数有n个输入正确便会返回nprintf("您输入的菜单错误,请重新输入。\n");while (getchar() != '\n');//内层while循环换成下面的语句也可以解决问题,但VS的编译器不支持fflush(stdin)函数//fflush(stdin);}switch (nSelection){case 1://添加卡add();break;case 2://查询卡query();break;case 3://上机login();break;case 4://下机settle();break;case 5://充值addMoney();break;case 6://退费refundMoney();break;case 7://注销卡annul();break;case 8://修改密码changePwd();break;case 9://重新激活卡renew();break;case 10://显示所有卡信息allCard();break;case 0://退出exitApp();break;default:printf("您输入的菜单错误,请重新输入。\n");break;}}while (nSelection != 0);return 0;}

meun.h

#ifndef MENU_H#define MENU_Hvoid outputMenu(); //声明输入菜单函数void add(); //声明添加卡函数void query(); //声明查询卡函数void login(); //声明上机函数void settle(); //声明下机函数void addMoney();//声明充值函数void refundMoney(); //声明退费函数void annul(); //声明注销卡函数void changePwd();//声明更改密码函数void renew(); //声明重新激活卡函数void allCard(); //声明显示所有卡信息函数void exitApp(); //声明退出函数#endif

meun.c

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>#include<string.h>#include<stdlib.h>#include<time.h>#include"model.h"#include"global.h"#include"tool.h"#include"card_service.h"#include"card_file.h"void outputMenu() {printf("\n---------菜单---------\n");printf("1.添加卡\n");printf("2.查询卡\n");printf("3.上机\n");printf("4.下机\n");printf("5.充值\n");printf("6.退费\n");printf("7.注销卡\n");printf("8.修改密码\n");printf("9.重新激活卡\n");printf("10.显示所有卡信息\n");printf("0.退出\n");printf("请输入菜单编号(0-8):");}//添加卡void add() {struct tm* stime;struct tm* etime;struct Card card;char newCardName[30] = {"\0" };char newCardPwd[15] = {"\0" };int namesize = 0, passwordsize = 0;printf("---------添加卡---------\n");printf("请输入卡号<长度为1-18>:");scanf("%s", newCardName);namesize = strlen(newCardName);printf("请输入密码<长度为1-8>:");scanf("%s", newCardPwd);passwordsize = strlen(newCardPwd);if (namesize > 18 || passwordsize > 8) {printf("卡号或密码输入长度超出规定!\n");return;}if (checkcardname(newCardName) == TRUE) //查重{printf("该卡已存在,不能重复添加\n");return;}//将输入的卡号和密码保存到卡结构体中strcpy(card.aName, newCardName);strcpy(card.aPwd, newCardPwd);printf("请输入开卡金额<RMB>:");//该循环用来解决输入字符(串)后会进入死循环的问题,与main函数中用法相同while (scanf("%lf", &card.fBalance) != 1) {printf("您输入的开卡金额有误。(请输入整数或小数)\n");printf("请重新输入:\n");while (getchar() != '\n');}card.fTotalUse = 0;//累计使用card.nStatus = 0; //卡状态card.nUseCount = 0;//使用次数card.nDel = 0;//删除标识card.tStart = card.tEnd = card.tLast = time(NULL);stime = localtime(&card.tStart);etime = localtime(&card.tEnd);etime->tm_year = stime->tm_year + 1;card.tEnd = mktime(etime);//将卡结构体信息储存在文件中savecard(&card, CARDPATH);printf("\n-----添加的卡信息如下-----\n");printf(" 卡号 :%s\n 密码 :%s\n 卡状态 :%d\n开卡金额:%.2lf\n", card.aName, card.aPwd, card.nStatus, card.fBalance);}//查询卡void query(){int choice = 0;int p = 0;char aName[18] = {'\0' };char tlast[20] = {'\0' };Card* ccard = NULL;printf("请选择<1.精确查询 2.模糊查询>:");while (scanf("%d", &choice) != 1) {//循环作用与main函数中相同printf("您输入的选项有误,请重新输入。\n");while (getchar() != '\n') ;}switch (choice){case 1:printf("请输入查询卡号:");scanf("%s", aName);ccard = querycard(aName);if (ccard == NULL)printf("\n没有该卡的信息!\n");else {timeToString(ccard->tLast, tlast);printf("\n查询的卡信息:\n");printf(" 卡号 :%s\n 卡状态 :%d\n 余额 :%g\n累计使用金额:%.2lf\n 累计次数 :%d\n上次使用时间:%s\n",ccard->aName, ccard->nStatus, ccard->fBalance, ccard->fTotalUse, ccard->nUseCount, tlast);}break;case 2:{printf("请输入查询卡号<长度为1-18>:");scanf("%s", aName);ccard = querycards(aName, &p);if (ccard == NULL || p == 0)printf("\n没有该卡的信息\n");else{printf("\n查询到的卡信息:\n");for (int k = 0; k < p; k++){printf("\n-----卡%d-----\n", k + 1);timeToString(ccard[k].tLast, tlast);//将时间转换为字符串printf(" 卡号 :%s\n 卡状态 :%d\n 余额 :%.2lf\n累计使用金额:%.2lf\n 累计次数 :%d\n上次使用时间:%s\n", ccard[k].aName, ccard[k].nStatus, ccard[k].fBalance, ccard[k].fTotalUse, ccard[k].nUseCount, tlast);}free(ccard);ccard = NULL;}}break;default:printf("您输入的选项有误,请重新输入。\n");break;}}//上机void login(){Card* acard = NULL;char llogin[20] = {'\0' };char fcardname[18] = {'\0' };char fpassword[8] = {'\0' };//接收卡号和密码printf("请输入上机卡号:");scanf("%s", &fcardname);printf("请输入密码:");scanf("%s", &fpassword);//上机状态更改acard = doLogin(fcardname, fpassword);if (acard == NULL)printf("\n上机失败!\n");else{printf("\n上机成功!\n");printf("卡号:%s\n", acard->aName);printf("余额:%.2f\n", acard->fBalance);timeToString(acard->tLast, llogin);printf("上机时间:%s\n", llogin);}}//下机void settle() {Card* acard = NULL;char tlogout[20] = {'\0' };char acardname[18] = {'\0' };char apassword[8] = {'\0' };//接收卡号和密码printf("请输入下机卡号:");scanf("%s", &acardname);printf("请输入密码:");scanf("%s", &apassword);acard = doSettle(acardname, apassword); //上机状态更改if (acard == NULL)printf("\n下机失败!\n");else{printf("卡号:%s\n", acard->aName);printf("余额:%.2f\n",acard->fBalance);timeToString(acard->tLast, tlogout);printf("下机时间:%s\n", tlogout);printf("\n下机成功!\n");}}//充值void addMoney() {Card* acard = NULL;double money;char fcardname[18] = {'\0' };char fpassword[8] = {'\0' };printf("请输入卡号<长度为1-18>:");scanf("%s", &fcardname); //接收卡号和密码printf("请输入密码<长度为1-8>:");scanf("%s", &fpassword);printf("请输入充值金额<RMB>:");//该循环用来解决输入字符(串)后会进入死循环的问题,与main函数中用法相同while (scanf("%lf", &money) != 1) {printf("您输入的充值金额有误。(请输入整数或小数)\n");printf("请重新输入:\n");while (getchar() != '\n');}acard = doAddMoney(fcardname, fpassword, money);if (acard == NULL)printf("\n充值失败\n");else{printf("\n充值成功\n");printf("卡号:%s\n", acard->aName);printf("余额:%.2f\n", acard->fBalance);}}//退费void refundMoney() {Card* acard = NULL;double money;char fcardname[18] = {'\0' };char fpassword[8] = {'\0' };printf("请输入卡号<长度为1-18>:");scanf("%s", &fcardname);printf("请输入密码<长度为1-8>:");scanf("%s", &fpassword);printf("请输入退费金额<RMB>:");//该循环用来解决输入字符(串)后会进入死循环的问题,与main函数中用法相同while (scanf("%lf", &money) != 1) {printf("您输入的退费金额有误。(请输入整数或小数)\n");printf("请重新输入:\n");while (getchar() != '\n');}acard = doRefunMoney(fcardname, fpassword, money);if (acard == NULL)printf("\n退费失败\n");else{printf("\n退费成功\n");printf("卡号:%s\n", acard->aName);printf("余额:%.2f\n", acard->fBalance);}}//注销卡void annul() {Card* acard = NULL;int n = 0;char fcardname[18] = {'\0' };char fpassword[8] = {'\0' };printf("请输入卡号<长度为1-18>:");scanf("%s", &fcardname);printf("请输入密码<长度为1-8>:");scanf("%s", &fpassword);acard = doAnnul(fcardname, fpassword);if (acard == NULL)printf("\n注销失败\n");elseprintf("\n注销成功\n");}//更改密码void changePwd() {Card* acard = NULL;char fcardname[18] = {'\0' };char fpassword[8] = {'\0' };printf("请输入卡号<长度为1-18>:");scanf("%s", &fcardname); //接收卡号和密码printf("请输入密码<长度为1-8>:");scanf("%s", &fpassword);acard = doChangePwd(fcardname, fpassword);if (acard == NULL)printf("\n更改密码失败\n");else{printf("\n更改密码成功\n");printf("卡号:%s\n", acard->aName);printf("更改后的密码:%s\n", acard->aPwd);}}//重新激活卡void renew(){Card* acard = NULL;char tend[20] = {'\0' };int n = 0;char fcardname[18] = {'\0' };char fpassword[8] = {'\0' };printf("请输入卡号<长度为1-18>:");scanf("%s", &fcardname);printf("请输入密码<长度为1-8>:");scanf("%s", &fpassword);acard = doRenew(fcardname, fpassword);if (acard == NULL)printf("\n重新激活失败\n");else{printf("\n重新激活成功\n");printf("卡号:%s\n", acard->aName);timeToString(acard->tEnd, tend);printf("卡截止时间已更改为:%s\n", tend);}}//显示所有卡信息void allCard() {printf("所有的卡信息如下:\n");showAll();}//退出void exitApp() {freelist();printf("按任意键退出系统\n");getchar();}

card_service.h

#ifndef CARD_SERVICE_H#define CARD_SERVICE_HCard* querycard(const char*bcardname);Card* querycards(const char* bcardname, int *p2);Card* doLogin(const char* fcardname, const char* fpassword);Card* doSettle(const char* acardname, const char* apassword);Card* doAddMoney(const char* fcardname, const char* fpassword, double money);Card* doRefunMoney(const char* fcardname, const char* fpassword, double money);Card* doAnnul(const char* fcardname, const char* fpassword);Card* doRenew(const char* fcardname, const char* fpassword);Card* doChangePwd(const char* fcardname, const char* fpassword);int checkcardname(const char* fcardname);double consume(time_t tstar, time_t tend);void freelist();int putcard();void showAll();#endif

card_service.c

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>#include<string.h>#include<stdlib.h>#include"model.h"#include"global.h"#include"tool.h"#include"card_file.h"#include"card_service.h"Card cardmessage[100]; //卡信息lpnode list = NULL;lpnode head = NULL;//链表初始化int initlist(){head = (lpnode)malloc(sizeof(node));if (head != NULL){head->next = NULL;list = head;return TRUE;}return FALSE;}//释放链表void freelist(){lpnode p1;if (list != NULL){p1 = list->next;while (p1 != NULL){p1 = p1->next;free(p1);p1 = NULL;}}}//将文件的卡信息保存到链表中int putcard(){int k = 0;int j;Card *fcard = NULL;lpnode node1 = NULL;lpnode p1 = NULL;if (list != NULL)freelist();initlist();k = getcardnum(CARDPATH); //获取卡数量fcard = (Card *)malloc(sizeof(Card)*k);//动态分配内存if (fcard == NULL)return FALSE;if (readcard(fcard, CARDPATH) == FALSE)//获取卡信息{free(fcard);fcard = NULL;return FALSE;}for (j = 0, node1 = list; j < k; j++){p1 = (lpnode)malloc(sizeof(node));//为节点分配内存if (p1 == NULL)//分配内存失败,返回FALSE{free(fcard);fcard = NULL;return FALSE;}memset(p1, 0, sizeof(node));//初始化新空间全部赋值为0p1->data = fcard[j]; //将信息保存到节点中p1->next = NULL;node1->next = p1; //将节点添加到链表尾node1 = p1;}free(fcard);fcard = NULL;return TRUE;}//添加卡时查询是否重复int checkcardname(const char* fcardname){lpnode node = NULL;//获取卡信息if (putcard() == FALSE)return TRUE;node = list->next;while (node != NULL){if (strcmp(node->data.aName, fcardname) == 0)return TRUE;node = node->next;}return FALSE;}//精确查询Card* querycard(const char* bcardname){lpnode node1 = NULL;if (putcard() == FALSE)return FALSE;node1 = list->next; //链表头节点指向下一个节点while (node1 != NULL){if (strcmp(node1->data.aName, bcardname) == 0)return &node1->data;node1 = node1->next;}return NULL;}//模糊查询Card* querycards(const char* bcardname, int *p2){lpnode node1 = NULL;Card* fcard = NULL;if (putcard() == FALSE)return FALSE;fcard = (Card*)malloc(sizeof(Card));if (fcard == NULL)return NULL;node1 = list->next;while (node1 != NULL){if (strstr(node1->data.aName, bcardname) != NULL){fcard[*p2] = node1->data;(*p2)++;fcard = (Card *)realloc(fcard, ((*p2) + 1) * sizeof(Card));}node1 = node1->next;}return fcard;}//上机状态更改Card* doLogin(const char* fcardname, const char* fpassword){char llogin[20] = {'\0' };lpnode node = NULL;//获取卡信息if (putcard() == FALSE)return NULL;node = list->next;head = node;//判断能否上机while (node != NULL){if (strcmp(node->data.aName, fcardname) == 0 && strcmp(node->data.aPwd, fpassword) == 0){//状态确认if (node->data.nStatus == 1) {printf("\n该卡已上机\n");return NULL;}if (node->data.nStatus == 2){printf("\n该卡已注销\n若想继续使用请重新激活\n");return NULL;}node->data.tLast = time(NULL);if (node->data.tLast - node->data.tEnd >= 0){printf("\n该卡已过期\n若需要退款请直接注销卡\n若想继续使用请重新激活\n");return NULL;}if (node->data.fBalance <= 0)//余额确认{printf("\n该卡余额不足\n");return NULL;}//更新链表卡信息node->data.nStatus = 1;node->data.nUseCount++;node->data.tLast = time(NULL);//更新卡文件信息if (renewcard(head, CARDPATH) == TRUE)return &node->data;}node = node->next;}printf("\n卡号或密码输入错误\n");return NULL;}//下机状态更改Card* doSettle(const char* acardname, const char* apassword){char tlogout[20] = {'\0' };lpnode node = NULL;time_t logintime;double money = 0;//获取卡信息if (putcard() == FALSE)return NULL;node = list->next;head = node;//判断能否下机while (node != NULL){if (strcmp(node->data.aName, acardname) == 0 && strcmp(node->data.aPwd, apassword) == 0){//状态确认if (node->data.nStatus == 0) {printf("\n该卡未上机\n");return NULL;}else if (node->data.nStatus == 2){printf("\n该卡已注销\n若想继续使用请重新激活\n");return NULL;}node->data.tLast = time(NULL);if (node->data.tLast - node->data.tEnd >= 0){printf("\n该卡已过期\n若需要退款请直接注销卡\n若想继续使用请重新激活\n");return NULL;}//更新链表卡信息node->data.nStatus = 0;logintime = node->data.tLast;node->data.tLast = time(NULL);money = consume(logintime, node->data.tLast);printf("\n此次消费金额:%.2lf\n",money);//更新卡文件信息if (renewcard(head, CARDPATH) == TRUE)return &node->data;}node = node->next;}printf("\n卡号或密码输入错误\n");return NULL;}//计算消费金额double consume(time_t tstar, time_t tend){time_t sec = 0;time_t min = 0;time_t hour = 0;double money = 0;sec = tend - tstar; //秒min = sec / 60; //分hour = sec / 60;money = hour * CHARGE;return money;}//充值Card* doAddMoney(const char* fcardname, const char* fpassword, double money){lpnode node = NULL;//获取卡信息if (putcard() == NULL)return NULL;node = list->next;head = node;while (node != NULL) //判断账号密码是否输入正确{if (strcmp(node->data.aName, fcardname) == 0 && strcmp(node->data.aPwd, fpassword) == 0){//状态确认if (node->data.nStatus == 2){printf("\n该卡已注销\n若想继续使用请重新激活\n");return NULL;}node->data.tLast = time(NULL);if (node->data.tLast - node->data.tEnd >= 0){printf("\n该卡已过期\n若需要退款请直接注销卡\n若想继续使用请重新激活\n");return NULL;}//更新链表卡信息node->data.fBalance = node->data.fBalance + money;//更新卡文件信息if (renewcard(head, CARDPATH) == TRUE)return &node->data;}node = node->next;}printf("\n卡号或密码输入错误\n");return NULL;}//退费Card* doRefunMoney(const char* fcardname, const char* fpassword, double money){lpnode node = NULL;//获取卡信息if (putcard() == NULL)return NULL;node = list->next;head = node;while (node != NULL) //判断账号密码是否输入正确{if (strcmp(node->data.aName, fcardname) == 0 && strcmp(node->data.aPwd, fpassword) == 0){//状态确认if (node->data.nStatus== 2){printf("\n该卡已注销\n");return NULL;}node->data.tLast = time(NULL);if (node->data.tLast - node->data.tEnd >= 0){printf("\n该卡已过期\n若需要退款请直接注销卡\n若想继续使用请重新激活\n");return NULL;}if (node->data.fBalance < money)//余额确认{printf("\n该卡余额不足\n");return NULL;}//更新链表卡信息node->data.fBalance = node->data.fBalance - money;//更新卡文件信息if (renewcard(head, CARDPATH) == TRUE)return &node->data;}node = node->next;}printf("\n卡号或密码输入错误\n");return NULL;}//注销卡Card* doAnnul(const char* fcardname, const char* fpassword){lpnode node = NULL;//获取卡信息if (putcard() == NULL)return NULL;node = list->next;head = node;while (node != NULL) //判断账号密码是否输入正确{if (strcmp(node->data.aName, fcardname) == 0&& strcmp(node->data.aPwd, fpassword) == 0){//状态确认if (node->data.nStatus == 2) {printf("\n该卡已注销\n");return NULL;}node->data.tLast = time(NULL);if (node->data.tLast - node->data.tEnd >= 0){printf("\n该卡已过期\n若需要退款请直接注销卡\n");return NULL;}printf("\n该退余额:%.2lf\n",node->data.fBalance);//更新链表卡信息node->data.fBalance = 0.00;node->data.nStatus = 2;//更新卡文件信息if (renewcard(head, CARDPATH) == TRUE)return &node->data;}node = node->next;}printf("\n卡号或密码输入错误\n");return NULL;}//更改密码Card* doChangePwd(const char* fcardname, const char* fpassword){lpnode node = NULL;char newPwd[8] = {'\0' };int passwordsize;//获取卡信息if (FALSE == putcard())return NULL;node = list->next;head = node;while (node != NULL){//判断账号密码是否输入正确if (strcmp(node->data.aName, fcardname) == 0&& strcmp(node->data.aPwd, fpassword) == 0){//状态确认if (node->data.nStatus == 2){printf("\n该卡已注销\n若想继续使用请重新激活\n");return NULL;}node->data.tLast = time(NULL);if (node->data.tLast - node->data.tEnd >= 0){printf("\n该卡已过期\n若需要退款请直接注销卡\n若想继续使用请重新激活\n");return NULL;}printf("\n请输入新密码<长度为1-8>:");scanf("%s", &newPwd);passwordsize = strlen(newPwd);if (passwordsize > 8) {printf("密码输入长度超出规定!\n");return;}//更新链表卡信息strcpy(node->data.aPwd, newPwd);//更新卡文件信息if (renewcard(head, CARDPATH ) == TRUE)return &node->data;}node = node->next;}printf("\n卡号或密码输入错误\n");return NULL;}//重新激活卡Card* doRenew(const char* fcardname, const char* fpassword){struct tm* stime;struct tm* etime;lpnode node = NULL;//获取卡信息if (FALSE == putcard())return NULL;node = list->next;head = node;while (node != NULL) {//判断账号密码是否输入正确if (strcmp(node->data.aName, fcardname) == 0 && strcmp(node->data.aPwd, fpassword) == 0){node->data.tLast = node->data.tStart = time(NULL);if ((node->data.tLast - node->data.tEnd < 0)){if (node->data.nStatus == 0 || node->data.nStatus == 1){printf("\n该卡仍能使用,不需要重新激活\n");return NULL;}}//更新链表卡信息node->data.tEnd = time(NULL);node->data.nStatus = 0;stime = localtime(&node->data.tStart);etime = localtime(&node->data.tEnd);etime->tm_year = stime->tm_year + 1;node->data.tEnd = mktime(etime);//更新卡文件信息if (renewcard(head, CARDPATH) == TRUE)return &node->data;}node = node->next;}printf("\n卡号或密码输入错误\n");return NULL;}//输出所有卡信息void showAll() {char stime[20] = {'\0' };//开卡时间char etime[20] = {'\0' };//截止时间char ltime[20] = {'\0' };//最后使用时间lpnode node = NULL;int ncount = 0;//获取卡信息if (putcard() == NULL)return ;node = list->next;printf("卡号\t密码\t状态\t开卡时间\t 截止时间\t\t累计金额 最后使用时间使用次数 余额删除标识\n");while (node != NULL) {//将时间转换为字符串timeToString(node->data.tStart, stime);timeToString(node->data.tEnd, etime);timeToString(node->data.tLast, ltime);printf("%s\t%s\t%d\t%s %s\t%.2lf\t %s %d\t%.2lf\t% d\n", node->data.aName, node->data.aPwd, node->data.nStatus, stime, etime,node->data.fTotalUse, ltime, node->data.nUseCount, node->data.fBalance, node->data.nDel);node = node->next;ncount++;}}

card_file.h

#ifndef CARD_FILE_H#define CARD_FILE_Hint savecard(const Card* fcard, const char* fpath);int readcard(Card* fcard, const char* fpath);int getcardnum(const char* fpath);Card analyzecard(char* bcup);int renewcard(lpnode node, const char* fpath);#endif

card_file.c

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h>#include"model.h"#include"global.h"#include"tool.h"#include"card_file.h"#include"card_service.h"Card analyzecard(char* bcup);int savecard(const Card* fcard, const char* fpath){FILE* fp = NULL;char stime[20] = {'\0' };//开卡时间char etime[20] = {'\0' };//截止时间char ltime[20] = {'\0' };//最后使用时间//打开文件if ((fp = fopen(fpath, "a")) == NULL)if ((fp = fopen(fpath, "r+")) == NULL){printf("文件打开失败。\n");return FALSE;}//将时间转换为字符串timeToString(fcard->tStart, stime);timeToString(fcard->tEnd, etime);timeToString(fcard->tLast, ltime);//写入文件fprintf(fp, "%s##%s##%d##%s##%s##%.2lf##%s##%d##%.2lf##%d\n", fcard->aName, fcard->aPwd, fcard->nStatus,stime, etime, fcard->fTotalUse, ltime, fcard->nUseCount, fcard->fBalance, fcard->nDel);//关闭文件fclose(fp);return TRUE;}//读取卡文件int readcard(Card* fcard, const char* fpath){FILE* fp = NULL;char acup[256] = {0 };int i = 0;//打开文件if ((fp = fopen(fpath, "r")) == NULL){printf("文件打开失败。\n");return FALSE;}//读取文件while (!feof(fp)){memset(acup, 0, 256); //清空数组if (fgets(acup, 256, fp) != NULL){if (strlen(acup) > 0){fcard[i] = analyzecard(acup);i++;}}}//关闭文件fclose(fp);return TRUE;}Card analyzecard(char* bcup){Card icard;const char *separative = "##"; //字符串中的分隔符char* cup = NULL;char* app = NULL;char flag[10][20] = {'\0' }; //保存分割之后的字符串int count = 0;cup = bcup;//cup为解析字符串while ((app = strtok(cup, separative)) != NULL){strcpy(flag[count], app);cup = NULL;count++;}strcpy(icard.aName, flag[0]);strcpy(icard.aPwd, flag[1]);icard.nStatus = atoi(flag[2]);icard.tStart = stringToTime(flag[3]);icard.tEnd= stringToTime(flag[4]);icard.fTotalUse = atof(flag[5]);icard.tLast = stringToTime(flag[6]);icard.nUseCount = atoi(flag[7]);icard.fBalance = atof(flag[8]);icard.nDel = atoi(flag[9]);return icard;}int getcardnum(const char* fpath){FILE* fp = NULL;char acup[256] = {'\0' };int k = 0;//打开文件fp = fopen(fpath, "r");if (fp == NULL)return FALSE;//读取文件while (!feof(fp)){//初始化memset(acup, 0, 256);if (fgets(acup, 256, fp) != NULL){if (strlen(acup) > 0){k++;}}}fclose(fp);return k;}int renewcard(lpnode node, const char* fpath){FILE* fp = NULL;char acup[256] = {'0' };char startime[20] = {'0' }; //开卡时间char endime[20] = {'0' }; //卡的截止时间char lasttimeime[20] = {'0' }; //最后使用时间int fline = 0;long fpos = 0;fp = fopen(fpath, "w");if (fp == NULL)return FALSE;while (node != NULL){timeToString(node->data.tStart, startime);timeToString(node->data.tEnd, endime);timeToString(node->data.tLast, lasttimeime);fprintf(fp, "%s##%s##%d##%s##%s##%.2lf##%s##%d##%.2lf##%d\n", node->data.aName, node->data.aPwd, node->data.nStatus,startime, endime, node->data.fTotalUse, lasttimeime,node->data.nUseCount, node->data.fBalance, node->data.nDel); //将数据写入文件node = node->next;}fclose(fp);return TRUE;}

tool.h

#ifndef TOOL_H#define TOOL_Hvoid timeToString(time_t t, char* pBuf); //声明timeToString()函数time_t stringToTime(char* pTime);//声明stringToTime()函数#endif

tool.c

#define _CRT_SECURE_NO_WARNINGS#include<time.h>#include<stdio.h>void timeToString(time_t t, char* pBuf){struct tm *timeinfo;timeinfo = localtime(&t);strftime(pBuf, 20, "%Y-%m-%d %H:%M", timeinfo);}time_t stringToTime(char* pTime){struct tm tml;time_t time1;sscanf(pTime, "%d-%d-%d %d:%d", &tml.tm_year, &tml.tm_mon,&tml.tm_mday, &tml.tm_hour, &tml.tm_min);tml.tm_year -= 1900; //年份为从1900年开始tml.tm_mon -= 1;//月份为1^11tml.tm_sec = 0;tml.tm_isdst -= -1;time1 = mktime(&tml);return time1;}

model.h

#ifndef MODEL_H#define MODEL_H#include<stdio.h>#include<time.h>typedef struct Card{char aName[18]; // 卡号char aPwd[8]; // 密码int nStatus; // 卡状态(0-未上机;1-正在上机;2-已注销)time_t tStart;// 开卡时间time_t tEnd; // 卡的截止时间 double fTotalUse; // 累计金额time_t tLast; // 最后使用时间int nUseCount;// 使用次数double fBalance; // 余额int nDel;// 删除标识 0-未删除,1-删除}Card;typedef struct node{Card data;struct node *next;}node, *lpnode;#endif

global.h

#ifndef GLOBAL_H#define GLOBAL_H#define FALSE 0#define TRUE 1#define CARDPATH "cardmessage\\card.txt"#define CHARGE 5 //每小时的网费#endif

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。