C语言网吧计费系统(小项目)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
系统是基于c语言写的小程序,以应付毕业项目或期末考试用。
由于用到fopen读写文件操作,编译前必须在当前文件下建立用户信息.txt 和充值卡.txt 两个文件,否则会报错。
效果图
#include <stdio.h>
#include <windows.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
//定义链表
typedef struct
{
char name[20];
char mima[20];
int state;
int jine;
}user;
typedef struct lnod
{
user data;
struct lnod *next;
}lnod, *linklist;
//充值卡定义链表
typedef struct
{
char name[30];
int jine;
}kami;
typedef struct kk
{
kami data;
struct kk *next;
}kk, *kamil;
//创建链表
void createlist_l(linklist *l)
{
*l = (linklist)malloc(sizeof(lnod));
(*l)->next = NULL;
}
//插入用户信息(尾插法)
int listinset_l(linklist *l,user data) {
linklist p = *l,q;
if (NULL==p)
return -1;
while (NULL!=p)
{
}
p = (linklist)malloc(sizeof(lnod));
p->data = data;
p->next = q->next;
q->next = p;
return 0;
}
//载入文件到链表
void filelist_l(linklist *l)
{
int i;
FILE *fp1;
user user0;
fp1 = fopen("用户信息.txt","rb");
for (i = 0;i<50;i++)
{
if (1!=fread(&user0,sizeof(user),1,fp1))
{
break;
}
listinset_l(l,user0);
}
fclose(fp1);
}
//查找制定用户是否存在
int locateelem_l(linklist l,char name[])
{
linklist p;
p = l->next;
while (p!=NULL)
{
if (!(strcmp(p->,name)))
{
break;
}
p = p->next;
}
if (p == NULL)
{
return -1;
}
else
return 0;
}
//查找指定用户和密码
int locateelem_l2(linklist l,char name[],char mm[]) {
p = l->next;
while (p!=NULL)
{
a = strcmp(p->,name);
b = strcmp(p->data.mima,mm);
if (a==0&&b==0)
{
//p->data.state = 1;
break;
}
p = p->next;
}
if (p == NULL)
{
return -1;
}
else
return 0;
}
//登陆后state = 1;
void gaistate_l(linklist *l,char name[]) {
linklist p;
int b;
p = (*l)->next;
while (p!=NULL)
{
b = strcmp(p->,name);
if (b==0)
{
p->data.state=1;
break;
}
else
{
p = p->next;
}
}
}
//下线state = 0
void xiaxian_l(linklist *l,char name[]) {
linklist p;
int b;
p = (*l)->next;
while (p!=NULL)
if (b==0)
{
p->data.state=0;
break;
}
else
{
p = p->next;
}
}
}
//修改金额
void gaijine_l(linklist *l,char name[],int j)
{
linklist p;
int b;
p = (*l)->next;
while (p!=NULL)
{
b = strcmp(p->,name);
if (b==0)
{
p->data.jine=p->data.jine+j;
printf("您当前余额为%d元",p->data.jine);
break;
}
else
{
p = p->next;
}
}
}
//修改密码
void gaimm_l(linklist *l,char name[],char gmm[])
{
linklist p;
int b;
p = (*l)->next;
while (p!=NULL)
{
b = strcmp(p->,name);
if (b==0)
{
strcpy(p->data.mima,gmm);
break;
{
p = p->next;
}
}
}
//下线扣费
void koufei_l(linklist *l,char name[],int j)
{
linklist p;
int b;
p = (*l)->next;
while (p!=NULL)
{
b = strcmp(p->,name);
if (b==0)
{
p->data.jine = p->data.jine-j;
break;
}
else
{
p = p->next;
}
}
}
//写文件
void userfile(user user0)
{
FILE *fp0;
if((fp0=fopen("用户信息.txt","ab"))==NULL)
{
printf("cannot open file\n");
return;
}
if(fwrite(&user0,sizeof(user),1,fp0)!=1)
printf("file write error\n");
fclose(fp0);
}
//更新文件
void update_file(linklist l)
{
FILE *fp;
linklist p;
p = l->next;
if (( fp= fopen("用户信息.txt","wb"))==NULL)
return;
}
while (p!=NULL)
{
if (p->data.state==1)
{
p->data.state = 0;
userfile(p->data);
p->data.state = 1;
}
else
{
userfile(p->data);
}
p = p->next;
}
}
//查询所有用户
void chaxun_l(linklist l)
{
linklist p;
p = l->next;
while (p != NULL)
{
printf("用户名:%-10s密码:%-10s余额%-10d是否在线(1/0):%d \n",p->,p->data.mima,p->data.jine,p->data.state);
p = p->next;
}
}
//充值卡创建链表
void createlist_k(kamil *l)
{
*l = (kamil)malloc(sizeof(kk));
(*l)->next = NULL;
}
//充值卡查找制定用户是否存在
int locateelem_k(kamil kl,char name[])
{
kamil p;
p = kl->next;
while (p!=NULL)
{
if (!(strcmp(p->,name)))
{
break;
}
if (p == NULL)
{
return -1;
}
else
return 0;
}
//充值卡插入用户信息(尾插法)
int listinset_k(kamil *l,kami data)
{
kamil p = *l,q;
if (NULL==p)
return -1;
while (NULL!=p)
{
q = p;
p = p->next;
}
p = (kamil)malloc(sizeof(kk));
p->data = data;
p->next = q->next;
q->next = p;
return 0;
}
//充值卡载入文件到链表
void filelist_k(kamil *l)
{
int i;
FILE *fp1;
kami kami0;
fp1 = fopen("充值卡.txt","rb");
for (i = 0;i<50;i++)
{
if (1!=fread(&kami0,sizeof(kami),1,fp1))
{
break;
}
listinset_k(l,kami0);
}
fclose(fp1);
}
//充值卡修改金额
void gaijine_k(kamil *l,char name[],int j)
{
kamil p;
while (p!=NULL)
{
b = strcmp(p->,name);
if (b==0)
{
p->data.jine=p->data.jine+j;
printf("您当前余额为%d元",p->data.jine);
break;
}
else
{
p = p->next;
}
}
}
//充值卡写文件
void kamifile(kami kami0)
{
FILE *fp0;
if((fp0=fopen("充值卡.txt","ab"))==NULL)
{
printf("cannot open file\n");
return;
}
if(fwrite(&kami0,sizeof(kami),1,fp0)!=1)
printf("file write error\n");
fclose(fp0);
}
//充值卡更新文件
void update_file_k(kamil l)
{
FILE *fp;
kamil p;
p = l->next;
if (( fp= fopen("充值卡.txt","wb"))==NULL)
{
printf("无法打开文件\n");
return;
}
while (p!=NULL)
{
kamifile(p->data);
p = p->next;
}
void delete_k(kamil *L,char name[]) {
kamil p,q;
int i;
p=(*L)->next;
q=*L;
while(p!=NULL)
{
i = strcmp(p->,name);
if(i == 0)
{
q->next=p->next;
free(p);
break;
}
else
{
q=p;
p=p->next;
}
}
}
//主函数
void main()
{
linklist l;
int b;//选择点
int z;//判断z是否等于0
int j;//金额
char yhm[20];
char mm[20],mm1[20];
char gmm[20],gmm1[20];//改密码
user n;
clock_t start,finish;
float jf;
char nk[15],nk0[15];//之下是卡密
int i;
// int kjine;
kami lsk;
kamil kl;
char gly[20] = "admin";//管理员密码
srand((unsigned)time(NULL));
createlist_l(&l);
filelist_l(&l);
createlist_k(&kl);
filelist_k(&kl);
while (1)
{
system("color f9");
system("cls");
printf(" ╭═══════欢═迎═光═临══════╮\n");
printf(" ╰╮╭----------------╮╭╯\n");
printf(" ▲╯║~~1、注册~~║╰▲\n");
printf(" ◇★║~~2、用户登陆~~║★◇\n");
printf(" ◇★║~~3、管理员登陆~~║★◇\n");
printf(" ★◇║~~4、退出~~║◇★\n");
printf(" ▼╮║~~本网吧壕专享一秒钟一元~~║╭▼\n");
printf(" ╭╯╰----------------╯╰╮\n");
printf(" ╰═══════祝═你═快═乐══════╯\n");
scanf("%d",&b);
switch(b)
{
case 1:
{
while (1)//注册界面
{
system("cls");
printf("请输入账号:\n");
scanf("%s",yhm);
z = locateelem_l(l,yhm);
if (z == 0)
{
printf("该用户名已存在,任意键返回");
fflush(stdin);
getchar();
break;
}
else
{
printf("请输入密码:\n");
scanf("%s",mm);
printf("请再次输入密码:\n");
scanf("%s",mm1);
if (!(strcmp(mm,mm1)))
{
printf("注册成功,任意键返回\n");
strcpy( , yhm);
strcpy(n.mima , mm);
n.jine = 0;
listinset_l(&l,n);
update_file(l);
fflush(stdin);
getchar();
break;
}
else
{
printf("两次密码输入不一致,请重新注册\n");
Sleep(1000);
continue;
}
}
}
break;
}
case 2://用户登陆
{
system("cls");
while(1)
{
printf("请输入用户名\n");
scanf("%s",yhm);
z = locateelem_l(l,yhm);
if (z!=0)
{
printf("用户名不存在,即将返回\n");
Sleep(1000);
break;
}
else
{
printf("请输入密码:\n");
scanf("%s",mm);
z = locateelem_l2(l,yhm,mm);
if (z==0)
{
gaistate_l(&l,yhm);
start = clock();
while(1)
{
system("cls");
printf(" ╭═══════祝═你═快═乐══════╮\n");
printf(" ╰╮╭----------------╮╭╯\n");
printf(" ▲╯║~~1、查余额~║╰▲\n");
printf(" ◇★║~~2、改密码~║★◇\n");
printf(" ◇★║~~3、充值卡充值~║★◇\n");
printf(" ★◇║~~4、小游戏~║◇★\n");
printf(" ▼╮║~~5、下线~║╭▼\n");
printf(" ╭╯╰----------------╯╰╮\n");
printf(" ╰═══════祝═你═快═乐══════╯\n");
scanf("%d",&b);
if (b == 1)
{
system("cls");
gaijine_l(&l,yhm,0);
printf("\n任意键返回\n");
fflush(stdin);
getchar();
continue;
}
if (b == 2)
{
system("cls");
printf("请输入新密码\n");
scanf("%s",gmm);
printf("请再次输入密码\n");
scanf("%s",gmm1);
if (!(strcmp(gmm,gmm1)))
{
printf("修改密码成功,任意键后返回\n");
gaimm_l(&l,yhm,gmm);
update_file(l);
fflush(stdin);
getchar();
break;
}
else
{
printf("两次密码输入不一致,请重新修改\n");
Sleep(1000);
continue;
}
}
if (b == 5)
{
printf("下线成功,任意键返回主界面:\n");
xiaxian_l(&l,yhm);
finish = clock();
jf = (int)((finish - start)/1000);
koufei_l(&l,yhm,jf);
update_file(l);
fflush(stdin);
getchar();
break;
}
if (b == 3)
{
system("cls");
printf("请输入充值卡\n");
scanf("%s",nk0);
b = locateelem_k(kl,nk0);
if (b!=0)
{
printf("您输入的充值卡不存在,请重新输入\n");
Sleep(1000);
continue;
}
if (b == 0)
{
printf("100元已成功充值进您的账号,任意键返回\n");
gaijine_l(&l,yhm,100);
update_file(l);
delete_k(&kl,nk0);
update_file_k(kl);
fflush(stdin);
getchar();
continue;
}
}
if (b == 4)
{
while (1)
{
system("cls");
iy = 10;
jy = 0;
printf("请在两秒钟内输入以下简单等式,答对过关,答错结束,任意
键开始\n");
fflush(stdin);
getchar();
while(1)
{
system("cls");
ay = rand()%iy;
by = rand()%iy;
iy=iy+100;
printf("%d + %d = ",ay,by);
fflush(stdin);
Sleep(2000);
ky = kbhit();
scanf("%d",&zhi);
fflush(stdin);
if (ky == 0)
{
printf("时间到啦\n");
if(jy<=5)
{
printf("你只通过了%d关,只击败了5%%的人,弱爆了。
任意键返回",jy);
fflush(stdin);
getchar();
break;
}
if(jy<=10)
{
printf("你通过了%d关,击败了80%%的人,天赋异禀!! 任意键返回",jy);
fflush(stdin);
getchar();
break;
}
if(jy>=11)
{
printf("你通过了%d关,击败了99%%的人,乃是绝世天才! 任意键返回",jy);
fflush(stdin);
getchar();
break;
}
}
if (ky == 1)
{
if (zhi == ay + by)
{
jy = jy +1;
continue;
}
if (zhi != ay + by)
{
if(jy<=5)
{
printf("你只通过了%d关,只击败了5%%的人,弱爆了。
任意键返回",jy);
fflush(stdin);
getchar();
break;
}
if(jy<=10)
{
printf("你通过了%d关,击败了80%%的人,天赋异禀!! 任意键返回",jy);
fflush(stdin);
getchar();
break;
}
if(jy>=11)
{
printf("你通过了%d关,击败了99%%的人,乃是绝世天才! 任意键返回",jy);
fflush(stdin);
getchar();
break;
}
}
}
}
break;
}
}
}
}
else
{
printf("登陆失败,一秒后返回\n");
Sleep(1000);
break;
}
break;
}
}
break;
}
case 3:
{
while(1)
{
system("cls");
printf("请输入管理员密码\n");
scanf("%s",yhm);
z = strcmp(yhm,gly);
if (z != 0)
{
printf("妖怪想冒充管理员,还不速速离去\n");
Sleep(2000);
break;
}
else
{
while(1)
{
system("cls");
fflush(stdin);
printf(" ╭═══════祝═你═快═乐══════╮\n");
printf(" ╰╮╭----------------╮╭╯\n");
printf(" ▲╯║~~1、给会员充值~║╰▲\n");
printf(" ◇★║~~2、给会员改密码~║★◇\n");
printf(" ◇★║~~3、生成充值卡~║★◇\n");
printf(" ◇★║~~4、查询所有用户信息~║★◇\n");
printf(" ★◇║~~5、修改管理员密码~║◇★\n");
printf(" ▼╮║~~6、退出管理员~║╭▼\n");
printf(" ╭╯╰----------------╯╰╮\n");
printf(" ╰═══════祝═你═快═乐══════╯\n");
scanf("%d",&b);
if (b == 1)
{
system("cls");
printf("请输用户名:\n");
scanf("%s",yhm);
z = locateelem_l(l,yhm);
if (z!=0)
{
printf("用户名不存在,即将返回\n");
Sleep(1000);
continue;
}
else
{
printf("请输入金额:\n");
scanf("%d",&j);
gaijine_l(&l,yhm,j);
printf("充值成功,任意键返回\n");
update_file(l);
fflush(stdin);
getchar();
continue;
}
}
if (b == 2)
{
system("cls");
printf("请输用户名:\n");
scanf("%s",yhm);
z = locateelem_l(l,yhm);
if (z!=0)
{
printf("用户名不存在,即将返回\n");
Sleep(1000);
continue;
}
else
{
printf("请输入新密码\n");
scanf("%s",gmm);
printf("请再次输入密码\n");
scanf("%s",gmm1);
if (!(strcmp(gmm,gmm1)))
{
printf("修改密码成功,任意键返回\n");
gaimm_l(&l,yhm,gmm);
update_file(l);
fflush(stdin);
getchar();
continue;
}
else
{
printf("两次密码输入不一致,请重新修改\n");
Sleep(1000);
continue;
}
}
}
if (b == 3)
{
system("cls");
srand((unsigned)time(NULL));
for (i = 0;i<14;)
{
nk[i] = rand() % 26+'A';
i+=2;
}
for (i = 1;i<14;)
{
nk[i] = rand() % 9+'0';
i+=2;
}
nk[i-1] = '\0';
printf("您生成了充值卡,余额为100元\n卡密为:%s\n任意键返回",nk);
strcpy(,nk);
lsk.jine = 100;
listinset_k(&kl,lsk);
update_file_k(kl);
fflush(stdin);
getchar();
continue;
}
if (b == 4)
{
system("cls");
chaxun_l(l);
printf("任意键返回\n");
fflush(stdin);
getchar();
continue;
}
if (b == 5)
{
system("cls");
printf("请输入新密码\n");
scanf("%s",gly);
printf("密码修改成功,请重新登陆,任意键继续");
fflush(stdin);
getchar();
break;
}
if (b == 6)
{
break;
}
}
}
break;
}
break;
}
case 4:
{
system("cls");
printf(" \n");
printf(" ◢███◣◢███◣◢███◣\n");
printf(" ██████\n");
printf(" ◥◣◢◤◥◣◢◤█\n");
printf(" ◢███◣◢███◣████◣\n");
printf(" ██████\n");
printf(" ██████\n");
printf(" ◥███◤◥███◤◥███◤\n");
printf(" \n");
printf(" ▅▅▅▅▅▅▅▅▅▅▅▅\n");
printf(" ▅▅█▅▅█▅██\n");
printf(" █▅█▅█████\n");
printf(" ▅█▅█▅█▅◢◤▋▅▼\n");
printf(" █▅███◤███●\n");
printf(" \n");
Sleep(1000);
exit(0);
}
default:
{
break;
}
}
}
}。