C语言共享单车管理系统
Q___Narcissus 人气:01.功能模块图;
2.各个模块详细的功能描述。
1.登陆:登陆分为用户登陆,管理员登陆以及维修员登录,登陆后不同的用户所执行的操作不同,权限不同。
(1)管理员登录:管理员登陆之后,可使用键盘的上下键来控制菜单上的选项,管理员权限不多,可执行最多的操作,可以对单车进行投放,删除,修改,查找,车牌号排序,查看所有单车信息,所有用户信息,管理员能通过或驳回正在申请注册的维修员,还可以查看完全通过认证的维修员。
(2)用户登录:用户登录时需要输入注册时的账号和密码,或者是之前注册的有效账号及密码,用户可以查看自己附近的车,立即用车当车密码出现的时候就开始计时了,还车后停止计时,一个时间段内没有还车不能再借车了,另外还有报修,报修的信息会上传到维修员那里,还可以查看自己的信息修改自己的信息,当用户账号不足100元时不能再借车了,所以还有充值这一项功能。
(3)维修员登录:维修员登录时也需要账户和密码(管理员认证的),维修员权限较大,只可以查看自己的信息,修改自己的信息,以及查看用户报修的单车信息。
2.注册:注册有用户注册和维修员注册。
(1)用户注册:用户注册时,手机号即为登录账户,有查重的功能,每个手机号只能注册一个用户,设置密码时,系统会对你的密码的安全系数进行评分,以及需要确认密码,两次不一致注册失败,输入年龄,年龄不满10岁不可注册,注册成功后需要起一个用户名,需要绑定充值卡,首次充值200元,即可登录。
(2)维修员注册:维修员注册时,手机号即为登录账户,也有查重的功能,每个手机号只能注册一个用户,设置密码时,系统会对你的密码的安全系数进行评分,以及需要确认密码,两次不一致注册失败,后需要起一个用户名,输入年龄,年龄不满18岁不可注册,但此时并没有注册成功,只是完成了申请,不可登录,等待管理员认证,通过,注册成功,即可登录,驳回,注册失败。
3.增加:增加单车信息到文件 中。
4.修改:修改单车信息,修改用户个人信息,修改维修员个人信息。
5.删除:删除单车。
6.查找:查找单车并按所选顺序查看。
3.详细设计
(1).功能函数的调用关系图
(2).各功能函数的数据流程图
a.(查找单车)
b.(增加单车)
c.(删除单车)
d.(修改单车信息)
e.(查看所有用户信息)
f.(查看所有维修员信息)
g.(注册)
h.(登陆)
3.代码:
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<conio.h> #include<windows.h> #include<time.h> #include<process.h> #define Up 0x48 #define Down 0x50 #define LEN sizeof(struct node) #define LEN_ sizeof(struct node_user) #define LEN_1 sizeof(struct node_repairman) typedef struct node { char number[100]; char mima[100]; char address[100]; char profit[100]; struct node *next; }NODE; typedef struct node_user { char number_user[200]; char mima_user[100]; char mima_user2[100]; char name_user[200]; char bank_card[200]; int age; int h; int purse; struct node_user *next; }NODE_USER; typedef struct node_repairman { char number_repairman[100]; char mima_repairman[100]; char mima_repairman2[100]; char name_repairman[100]; int age; struct node_repairman *next; }NODE_REPAIRMAN; int icount,j,w=1,k; //**********************函数声明************************** void Gotoxy(int x, int y); NODE *input (); void show (); //管理员创建单车信息 NODE * add_node (NODE *phead); //管理员增加单车信息 void delete_node (); //管理员删除单车信息 void print (); void print_user(NODE_USER *m); void print_repairman_(NODE_REPAIRMAN *m); void print_repairman_1(NODE_REPAIRMAN *m); //输出 void modify (); //修改 NODE *look_for (); void look_for2 (NODE_USER *n); NODE_REPAIRMAN *look_for3 (); void look_for_bike (NODE *a); NODE *look_for_repetition (char a[20]); //查找 void savefile(NODE *phead); //写文件(A+) void savefile_(NODE *phead); void savefile_user(NODE *phead); void savefile_user_(NODE_USER *m); void savefile_repairman_check_1(); //写文件(W) NODE *readfile(); NODE_USER *readfile_user(); NODE_REPAIRMAN *readfile_repairman(); void user (NODE_USER *l); void repairman_ (NODE_REPAIRMAN *l); void admin (); //读文件 void welcome(); //欢迎函数 void send_back (NODE *d); void sort_num(); void sign_in (); void menu_1 (); //菜单 void choice (); void goodbye(); //******************************************************** void Gotoxy(int x, int y) //光标移动 { HANDLE hout;//定义句柄变量 COORD coord;//定义结构体 coord.X = x; coord.Y = y; hout = GetStdHandle(STD_OUTPUT_HANDLE);//获得标准输出句柄 SetConsoleCursorPosition(hout, coord);//移动光标 return; } NODE *input () //管理员创建单车信息 { char s[100]; NODE *phead,*pnew,*pend; phead=NULL; icount=0; pend=pnew=(NODE *)malloc(LEN); for(;;) { printf("\t\t\t共享单车的车牌号(数字):"); scanf("%s",pnew->number); strcpy(s,pnew->number); if(strlen(pnew->number)>8) { printf("请输入少于8位的车牌号!\n"); } for(j=0;(size_t)j<strlen(s);j++) { if(s[j]<'0'||s[j]>'9') { printf("车牌号只能为数字!重新输入!\n"); break; } } if(strlen(pnew->number)<=8&&(size_t)j==strlen(s)) { break; } } printf("\n\n\t\t\t请为该共享单车设置密码:"); scanf("%s",pnew->mima); for(;;) { loop2: menu_1(); // system("color 07"); printf("请选择该共享单车的初始投放地点:"); scanf("%s",pnew->address); strcpy(s,pnew->address); for(j=0;(size_t)j<strlen(s);j++) { if(s[j]<'0'||s[j]>'7') { system("cls"); printf("\a"); // system("color 0A"); printf("\n\n\n\n\n\t\t\t\t抱歉,目前只有这几个投放地点呦! ^_^ \n"); Sleep(500); system("cls"); goto loop2; } } if(strlen(pnew->address)<=8&&(size_t)j==strlen(s)) { break; } } while(strcmp(pnew->number,"0")==1) { system("cls"); icount++; if(icount==1) { pnew->next=NULL; phead=pnew; } else { pnew->next=NULL; pend->next=pnew; pend=pnew; } pnew=(NODE *)malloc(LEN); for(;;) { printf("共享单车的车牌号(数字):"); scanf("%s",pnew->number); strcpy(s,pnew->number); if(strlen(pnew->number)>8) { printf("请输入少于8位的车牌号!\n"); } for(j=0;(size_t)j<strlen(s);j++) { if(s[j]<'0'||s[j]>'9') { printf("车牌号只能为数字!重新输入!\n"); break; } } if(strlen(pnew->number)<=8&&(size_t)j==strlen(s)) { break; } } printf("请为该共享单车设置密码:"); scanf("%s",pnew->mima); for(;;) { loop3: menu_1(); // system("color 07"); printf("请选择该共享单车的初始投放地点:"); scanf("%s",pnew->address); strcpy(s,pnew->address); for(j=0;(size_t)j<strlen(s);j++) { if(s[j]<'0'||s[j]>'7') { system("cls"); printf("\a"); // system("color 0A"); printf("\n\n\n\n\n\t\t\t\t抱歉,目前只有这几个投放地点呦! ^_^ \n"); Sleep(500); system("cls"); goto loop3; } } if(strlen(pnew->address)<=8&&(size_t)j==strlen(s)) { break; } } } printf("正在保存!"); savefile(phead); free(pnew); return phead; } void delete_node () //管理员删除单车信息 { NODE *l,*n,*m; char s[100]; m=l=readfile(); printf("\t\t\t\t请输入您要删除的共享单车的车牌号:\n"); scanf("%s",s); while(l!=NULL) { if(strcmp(m->number,s)==0) { m=m->next; printf("删除成功!\n"); break; } if(strcmp(l->next->number,s)==0) { n=l; n=n->next; l->next=n->next; printf("删除成功!\n"); break; } l=l->next; if(l->next==NULL) { printf("\t\t\t\t无删除项\n"); break; } } free(n); savefile_(m); } void modify () //管理员修改单车信息 { NODE *ma,*m; char z[100]; m=ma=readfile(); printf("\t\t\t\t请输入您要修改共享单车的车牌号:\n"); scanf("%s",z); while(ma!=NULL) { if(strcmp(ma->number,z)==0) { printf("请修改该共享单车的密码:"); scanf("%s",ma->mima); break; } ma=ma->next; if(ma->next==NULL) { printf("无修改项!\n"); break; } } savefile_(m); } NODE *look_for (NODE_USER *l) //管理员查找单车信息 { NODE *m; char q[100]; m=readfile(); if(l->purse <=100) { printf("您的金额已经不足100元!请尽快充值!\n\n"); Sleep(500); return NULL; } printf("\t\t\t\t请输入你要查找的共享单车的车牌号:\n"); scanf("%s",q); while(m!=NULL) { if(strcmp(m->number,q)==0) { l->h=1; printf("车牌号 密码 停放地点\n\n"); printf("%s\t \t",m->number); printf("%s\t ",m->mima); if(strcmp(m->address,"0")==0) printf("长安广场"); if(strcmp(m->address,"1")==0) printf("南大学城"); if(strcmp(m->address,"2")==0) printf("三森"); if(strcmp(m->address,"3")==0) printf("紫薇都市"); if(strcmp(m->address,"4")==0) printf("韦曲西街"); if(strcmp(m->address,"5")==0) printf("航天城"); if(strcmp(m->address,"6")==0) printf("韦曲南站"); if(strcmp(m->address,"7")==0) printf("秦岭沿线"); break; } m=m->next; } if(m==NULL) printf("\n还没有投放该编号的车哦!"); printf("\n"); return m; } NODE *look_for_0 () //管理员查找单车信息 { NODE *m,*n; int a,b=0; char q[100],p[100]; n=m=readfile(); int flag; int l = 8; printf("\n"); printf("-->管理员端"); while (1) { b=0; Gotoxy(53, 8); printf("1.按车牌号查找"); Gotoxy(53, 10); printf("2.按停放地点查询"); Gotoxy(53, 12); printf("3.按车号和地点查询"); Gotoxy(53, 14); printf("4.退出查询"); Gotoxy(52, l); printf("★"); flag = _getch(); if (flag == Down) { l=l+2; if (l == 16) l = 8; } if (flag == Up) { l=l-2; if (l == 6) l = 14; } if (flag == 13) { if (l == 8) { system("cls"); printf("\n->请输入您要查找的车的车牌号:"); scanf("%s",q); while(n!=NULL) { if(strcmp(n->number,q)==0) { b++; } n=n->next; } if(b!=0) printf("车牌号 密码 停放地点\n\n"); while(m!=NULL) { if(strcmp(m->number,q)==0) { printf("%s\t \t",m->number); printf("%s\t ",m->mima); if(strcmp(m->address,"0")==0) printf("长安广场"); if(strcmp(m->address,"1")==0) printf("南大学城"); if(strcmp(m->address,"2")==0) printf("三森"); if(strcmp(m->address,"3")==0) printf("紫薇都市"); if(strcmp(m->address,"4")==0) printf("韦曲西街"); if(strcmp(m->address,"5")==0) printf("航天城"); if(strcmp(m->address,"6")==0) printf("韦曲南站"); if(strcmp(m->address,"7")==0) printf("秦岭沿线"); break; } m=m->next; } if(m==NULL) printf("\n还没有投放该编号的车哦!"); printf("\n"); _getch(); } if (l == 10) { system("cls"); menu_1(); printf("\n->请输入您要查找在该停放位置的车:"); scanf("%s",q); while(n!=NULL) { if(strcmp(n->address,q)==0) { b++; } n=n->next; } if(b!=0) printf("车牌号 密码 停放地点\n\n"); while(m!=NULL) { if(strcmp(m->address,q)==0) { printf("%s\t \t",m->number); printf("%s\t ",m->mima); if(strcmp(m->address,"0")==0) printf("长安广场"); if(strcmp(m->address,"1")==0) printf("南大学城"); if(strcmp(m->address,"2")==0) printf("三森"); if(strcmp(m->address,"3")==0) printf("紫薇都市"); if(strcmp(m->address,"4")==0) printf("韦曲西街"); if(strcmp(m->address,"5")==0) printf("航天城"); if(strcmp(m->address,"6")==0) printf("韦曲南站"); if(strcmp(m->address,"7")==0) printf("秦岭沿线"); a=1; printf("\n"); } m=m->next; } if(a!=1) { printf("\n\n\n->该停放点的车都被骑走了哟!"); } _getch(); } if (l == 12) { system("cls"); printf("\n->请输入您要查找的车的车牌号:"); scanf("%s",q); menu_1(); printf("\n->请输入您要查找在该停放位置的车:"); scanf("%s",p); while(m!=NULL) { if(strcmp(m->number,q)==0 && strcmp(m->address,p)==0) { printf("车牌号 密码 停放地点\n\n"); printf("%s\t \t",m->number); printf("%s\t ",m->mima); if(strcmp(m->address,"0")==0) printf("长安广场"); if(strcmp(m->address,"1")==0) printf("南大学城"); if(strcmp(m->address,"2")==0) printf("三森"); if(strcmp(m->address,"3")==0) printf("紫薇都市"); if(strcmp(m->address,"4")==0) printf("韦曲西街"); if(strcmp(m->address,"5")==0) printf("航天城"); if(strcmp(m->address,"6")==0) printf("韦曲南站"); if(strcmp(m->address,"7")==0) printf("秦岭沿线"); } m=m->next; } if(m==NULL) printf("\n没有符合条件的车哦!"); printf("\n"); _getch(); } if(l == 14) { return NULL; } return m; } } } NODE *look_for_bike (char a[100]) //报修时查找单车信息 { NODE *m; m=readfile(); while(m!=NULL) { if(strcmp(m->number,a)==0) { break; } m=m->next; } if(m==NULL) printf("\n亲!报修信息有误!还没有投放该编号的车哦!"); printf("\n"); return m; } void send_back (NODE *d) //用户归还共享单车 { NODE *m,*l; char s[100]; l=m=readfile(); while(m!=NULL) { if(strcmp(m->number,d->number)==0) { menu_1 (); printf("\t\t\t请选择您归还的地点:"); scanf("%s",m->address); strcpy(s,m->address); for(j=0;(size_t)j<strlen(s);j++) { if(s[j]<'0'||s[j]>'7') { system("cls"); printf("\a"); printf("\n\n\n\n\n\t\t\t\t抱歉,目前只有这几个投放地点呦! ^_^ \n"); Sleep(500); system("cls"); } } if(strlen(m->address)<=8&&(size_t)j==strlen(s)) { break; } } m=m->next; } if(m==NULL) printf("\n还没有投放该编号的车哦!"); printf("\n"); savefile_(l); } NODE_USER *look_for2 () //登录 { loop_: NODE_USER *m,*n; int i=0; char c,a[100],b[100]; char x[100],password[100],p[100]; int l = 8; system("cls"); n=m=readfile_user(); printf("-->请输入正确的账号和密码\n"); printf("\n\n\n\n"); printf("\t\t\t\t\t╔════════════════╗\t\t\t\n"); printf("\t\t\t\t\t║☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆║\t\t\t\n"); printf("\t\t\t\t\t║┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄║\t\t\t\n"); printf("\t\t\t\t\t║ ║\t\t\t\n"); printf("\t\t\t\t\t║ ║\t\t\t\n"); printf("\t\t\t\t\t║ ║\t\t\t\n"); printf("\t\t\t\t\t╚════════════════╝\t\t\t\n"); while (1) { Gotoxy(44, 8); printf("★我的账号:"); Gotoxy(44, 10); printf("★我的密码:"); Gotoxy(44, l); if(l == 8) { printf("☆"); Gotoxy(56,8); scanf("%s",x); Gotoxy(44,10); printf("☆"); Gotoxy(56,10); while((c=getch())!=13) { if(c==8) { printf("\b \b"); i--; continue; } password[i++]=c; putchar('*'); } password[i]='\0'; printf("\n"); } break; } while(m!=NULL) { if(strcmp(m->number_user,x)==0&&strcmp(m->mima_user,password)==0) { system("cls"); printf("登陆成功!"); break; } m=m->next; } if(m==NULL) { mm: printf("\n\n\n\t\t\t\t\t 账号或密码错误!请重新输入!\n"); Sleep(500); printf("是否忘记密码,需要找回?"); scanf("%s",p); for(;;) { if(strcmp(p,"y")==0||strcmp(p,"Y")==0) { printf("\n->请输入账号:"); scanf("%s",a); printf("\n->请输入充值卡号:"); scanf("%s",b); while(n!=NULL) { if(strcmp(n->number_user,a)==0 && strcmp(n->bank_card,b)==0) { system("cls"); printf("\n\n->成功找回!下次可别忘了哟!"); printf("\n\n我的用户名:%s",n->name_user); printf("\n\n我的账号:%s\t",n->number_user); printf("\n\n我的密码:%s\t",n->mima_user); printf("\n\n我的钱包:¥ %d",n->purse); getch(); break; } n=n->next; } break; } else if(strcmp(p,"n")==0||strcmp(p,"N")==0) { printf("->已取消操作!\n"); Sleep(500); system("cls"); break; } else if(strcmp(p,"y")!=0 && strcmp(p,"Y")!=0 && strcmp(p,"n")!=0 && strcmp(p,"N")!=0) { printf("亲!只能输入y/n哦!手误的话重新输入吧!^_^\n"); Sleep(500); system("cls"); goto mm; } } goto loop_; } printf("\n"); return m; } NODE_REPAIRMAN *look_for3 () //登录 { loop_: int i=0; char c; char x[100],password[100]; int l = 8; NODE_REPAIRMAN *m; system("cls"); m=readfile_repairman(); printf("-->请输入正确的账号和密码\n"); printf("\n\n\n\n"); printf("\t\t\t\t\t╔════════════════╗\t\t\t\n"); printf("\t\t\t\t\t║☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆║\t\t\t\n"); printf("\t\t\t\t\t║┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄║\t\t\t\n"); printf("\t\t\t\t\t║ ║\t\t\t\n"); printf("\t\t\t\t\t║ ║\t\t\t\n"); printf("\t\t\t\t\t║ ║\t\t\t\n"); printf("\t\t\t\t\t╚════════════════╝\t\t\t\n"); while (1) { Gotoxy(44, 8); printf("★我的账号:"); Gotoxy(44, 10); printf("★我的密码:"); Gotoxy(44, l); if(l == 8) { printf("☆"); Gotoxy(56,8); scanf("%s",x); Gotoxy(44,10); printf("☆"); Gotoxy(56,10); while((c=getch())!=13) { if(c==8) { printf("\b \b"); i--; continue; } password[i++]=c; putchar('*'); } password[i]='\0'; printf("\n"); } break; } while(m!=NULL) { if(strcmp(m->number_repairman,x)==0&&strcmp(m->mima_repairman,password)==0) { system("cls"); printf("登陆成功!"); break; } m=m->next; } if(m==NULL) { printf("\n\n\t\t\t\t\t 账号或密码错误!请重新输入!\n"); goto loop_; } printf("\n"); return m; } void look_for_user (NODE_USER *m) //查找 { NODE_USER *n; n=readfile_user(); while(n!=NULL) { if(strcmp(n->number_user,m->number_user)==0) { system("cls"); printf("****我的信息->\n"); printf("用户名:%s\n",n->name_user); printf("账号:%s\n",n->number_user); printf("密码:%s\n",n->mima_user); break; } n=n->next; } printf("\n"); } void look_for_repairman (NODE_REPAIRMAN *m) //查找 { NODE_REPAIRMAN *n; n=readfile_repairman(); while(n!=NULL) { if(strcmp(n->number_repairman,m->number_repairman)==0) { system("cls"); printf("****我的信息->\n"); printf("用户名:%s\n",n->name_repairman); printf("账号:%s\n",n->number_repairman); printf("密码:%s\n",n->mima_repairman); break; } n=n->next; } printf("\n"); } void savefile(NODE *phead) //写文件 { FILE *fp; NODE *p; if((fp = fopen("bike.txt", "a+"))==NULL) printf("\a error! Can not open the file!"); // fputs("车牌号 密码 停车点\n",fp); for(p=phead;p!=NULL;p=p->next) { fprintf(fp,"%s %s %s \n",p->number,p->mima,p->address); } printf("\n\n->按任意键返回!\n"); fclose(fp); } void savefile_(NODE *phead) //写文件 { FILE *fp; NODE *p; if((fp = fopen("bike.txt", "w"))==NULL) printf("\a error! Can not open the file!"); for(p=phead;p!=NULL;p=p->next) { fprintf(fp,"%s %s %s \n",p->number,p->mima,p->address); } fclose(fp); } void savefile_user_bike(NODE *m) //写文件 { FILE *fp; if((fp = fopen("repairman_.txt", "a+"))==NULL) printf("\a error! Can not open the file!"); fprintf(fp,"%s %s %s \n",m->number,m->mima,m->address); printf("\n\n->按任意键返回!\n"); fclose(fp); } void savefile_user(NODE_USER *m) //写文件 { FILE *fp; if((fp = fopen("user.txt", "a+"))==NULL) printf("\a error! Can not open the file!"); fprintf(fp,"%s %s %s %s %d \n",m->name_user,m->number_user,m->mima_user,m->bank_card,m->purse); printf("\n\n->按任意键返回!\n"); fclose(fp); } void savefile_user_(NODE_USER *n) //写文件 { NODE_USER *m; FILE *fp; if((fp = fopen("user.txt", "w"))==NULL) printf("\a error! Can not open the file!"); for(m=n;m!=NULL;m=m->next) { fprintf(fp,"%s %s %s %s %d \n",m->name_user,m->number_user,m->mima_user,m->bank_card,m->purse); } printf("\n\n->按任意键返回!\n"); fclose(fp); } void savefile_repairman(NODE_REPAIRMAN *m) //写文件 { FILE *fp; if((fp = fopen("repairman.txt", "a+"))==NULL) printf("\a error! Can not open the file!"); fprintf(fp,"%s %s %s \n",m->name_repairman,m->number_repairman,m->mima_repairman); printf("\n\n->按任意键返回!\n"); fclose(fp); } void savefile_repairman_check(NODE_REPAIRMAN *m) //写文件 { FILE *fp; if((fp = fopen("repairman_check.txt", "a+"))==NULL) printf("\a error! Can not open the file!"); fprintf(fp," %s %s %s \n",m->name_repairman,m->number_repairman,m->mima_repairman); /* fprintf(fp,"%s\n",m->name_repairman); fprintf(fp,"%s\n",m->number_repairman); fprintf(fp,"%s\n",m->mima_repairman);*/ printf("\n\n->按任意键返回!\n"); fclose(fp); } void savefile_repairman_check_1() //写文件 { FILE *fp; fp = fopen("repairman_check.txt", "w"); fclose(fp); } NODE *readfile() //读文件 { NODE *head,*u; FILE *fp; head=(NODE *)malloc(LEN); head->next=NULL; fp=fopen("bike.txt","a+"); fclose(fp); if((fp=fopen("bike.txt","r"))==NULL) { printf("\n--->没有找到文件!\n"); Sleep(1000); exit(0); } /* else { rewind(fp); fgets(a,66,fp); } */ while(!feof(fp)) { u=(NODE *)malloc(LEN); u->next=NULL; fscanf(fp,"%s %s %s \n",u->number,u->mima,u->address); u->next=head->next; head->next=u; } fclose(fp); return (head->next); } NODE_USER *readfile_user() //读文件 { NODE_USER *head,*m; FILE *fp; head=(NODE_USER *)malloc(LEN_); head->next=NULL; fp=fopen("user.txt","a+"); fclose(fp); if((fp=fopen("user.txt","r"))==NULL) { printf("\n--->没有找到文件!\n"); Sleep(1000); exit(0); } while(!feof(fp)) { m=(NODE_USER *)malloc(LEN_); m->next=NULL; fscanf(fp,"%s %s %s %s %d \n",m->name_user,m->number_user,m->mima_user,m->bank_card,&m->purse); m->next=head->next; head->next=m; } fclose(fp); return (head->next); } NODE *readfile_user_bike() { char ch; NODE *head,*m; FILE *fp; head=(NODE *)malloc(LEN); head->next=NULL; fp=fopen("repairman_.txt","a+"); fclose(fp); if((fp=fopen("repairman_.txt","r"))==NULL) { printf("\n--->没有找到文件!\n"); Sleep(1000); exit(0); } ch=fgetc(fp); if(ch==EOF) { printf("还没有人报修呢!可以休息等等哦!\n\n"); k=1; return NULL; } while(!feof(fp)) { m=(NODE *)malloc(LEN); m->next=NULL; fscanf(fp,"%s %s %s \n",m->number,m->mima,m->address); m->next=head->next; head->next=m; } fclose(fp); return (head->next); } NODE_REPAIRMAN *readfile_repairman() //读文件 { NODE_REPAIRMAN *head,*m; FILE *fp; head=(NODE_REPAIRMAN *)malloc(LEN_); head->next=NULL; fp=fopen("repairman.txt","a+"); fclose(fp); if((fp=fopen("repairman.txt","r"))==NULL) { printf("\n--->没有找到文件!\n"); Sleep(1000); exit(0); } while(!feof(fp)) { m=(NODE_REPAIRMAN *)malloc(LEN_); m->next=NULL; fscanf(fp,"%s %s %s \n",m->name_repairman,m->number_repairman,m->mima_repairman); m->next=head->next; head->next=m; } fclose(fp); return (head->next); } NODE_REPAIRMAN *readfile_repairman_check() //读文件 { char ch; NODE_REPAIRMAN *head,*m; FILE *fp; head=(NODE_REPAIRMAN *)malloc(LEN_); head->next=NULL; fp=fopen("repairman_check.txt","a+"); fclose(fp); if((fp=fopen("repairman_check.txt","r"))==NULL) { printf("\n--->没有找到文件!\n"); Sleep(1000); exit(0); } ch=fgetc(fp); if(ch==EOF) { w=0; } while(!feof(fp)) { m=(NODE_REPAIRMAN *)malloc(LEN_); m->next=NULL; fscanf(fp," %s %s %s \n",m->name_repairman,m->number_repairman,m->mima_repairman); m->next=head->next; head->next=m; } fclose(fp); return (head->next); } void submit() { int i; system("cls"); printf("\n\n\n\n\t\t\t\t"); printf("★正在提交您的信息!★"); printf("\n\t\t\t "); for(i=0;i<7;i++) { printf("-> "); Sleep(300); } system("cls"); } void goodbye() { int i; system("cls"); printf("\n\n\n\n\t\t\t\t"); printf("★正在退出!★"); printf("\n\t\t\t "); for(i=0;i<5;i++) { printf("-> "); Sleep(300); } system("cls"); } void show () { printf("-->使用指南!\n\n"); printf(" 欢迎使用共享单车系统!该管理系统面向大众,可使用手机号自\n\n"); Sleep(500); printf("行注册用户端以及维修员,用户完成注册后即可使用,维修员需要等\n\n"); Sleep(500); printf("待管理员审核通过即可工作,每个手机号只能注册一次。\n\n\n"); Sleep(500); printf(" 用户租车收费:每半个小时1元,不满半小时按照一小时计算。\n\n\n\n\n\n\n"); Sleep(500); printf("感谢您的阅读。按任意键进入系统 ^_^ "); getch(); } void check () { NODE_REPAIRMAN *d; int flag; int l = 8; printf("\n"); printf("-->管理员端"); while (1) { Gotoxy(53, 8); printf("1.待认证的维修员 "); Gotoxy(53, 10); printf("2.已注册的维修员"); Gotoxy(53, 12); printf("3.返回上一层"); Gotoxy(52, l); printf("★"); flag = _getch(); if (flag == Down) { l=l+2; if (l == 14) l = 8; } if (flag == Up) { l=l-2; if (l == 6) l = 12; } if (flag == 13) { if (l == 8) { system("cls"); d=readfile_repairman_check(); print_repairman_(d); _getch(); } if (l == 10) { system("cls"); d=readfile_repairman(); print_repairman_1(d); printf("\n\n->按任意键继续!"); getch(); system("cls"); _getch(); } if (l == 12) { system("cls"); return; } } } } void menu_1 () { printf("\t\t ----------------------------------------------------------- \t\t\t\n"); printf("\t\t| 共享单车 长安区停放地点 |\t\t\t\n"); printf("\t\t|-----------------------------------------------------------|\t\t\t\n"); printf("\t\t| 【0】:长安广场 【1】:南大学城 【2】:三森 |\t\t\t\n"); printf("\t\t| |\t\t\t\n"); printf("\t\t| 【3】:紫薇都市 【4】:韦曲西街 【5】:航天城 |\t\t\t\n"); printf("\t\t| |\t\t\t\n"); printf("\t\t| 【6】:韦曲南站 【7】:秦岭沿线 |\t\t\t\n"); printf("\t\t ----------------------------------------------------------- \t\t\t\n"); } void sign_in () { NODE_USER *n; NODE_REPAIRMAN *l; int flag; int z = 8; system("cls"); while (1) { Gotoxy(53, 8); printf("1.管理员登陆"); Gotoxy(53, 10); printf("2.用户登陆"); Gotoxy(53, 12); printf("3.维修员登陆"); Gotoxy(53, 14); printf("0.退出登录"); Gotoxy(52, z); printf("★"); flag = _getch(); if (flag == Down) { z=z+2; if (z == 16) z = 8; } if (flag == Up) { z=z-2; if (z == 6) z = 14; } if (flag == 13) { if (z == 8) { system("cls"); admin(); _getch(); } if (z == 10) { n=look_for2(); user (n); system("cls"); _getch(); } if (z == 12) //权限在老师端之上才能注册 { l=look_for3(); repairman_(l); _getch(); } if (z == 14) { system("cls"); return; } } } } void print () //输出单车信息 { NODE *m; m=readfile(); printf("车牌号 密码 停放地点\n\n"); while(m!=NULL) { printf("%s\t\t",m->number); printf("%s\t ",m->mima); if(strcmp(m->address,"0")==0) printf("长安广场"); if(strcmp(m->address,"1")==0) printf("南大学城"); if(strcmp(m->address,"2")==0) printf("三森"); if(strcmp(m->address,"3")==0) printf("紫薇都市"); if(strcmp(m->address,"4")==0) printf("韦曲西街"); if(strcmp(m->address,"5")==0) printf("航天城"); if(strcmp(m->address,"6")==0) printf("韦曲南站"); if(strcmp(m->address,"7")==0) printf("秦岭沿线"); m=m->next; printf("\n\n"); } } void print_user(NODE_USER *m) { int i=0; while(m!=NULL) { i++; printf("第%d个用户:\t",i); printf("用户名:%-16s",m->name_user); printf("账号:%-16s\t",m->number_user); printf("密码:%-16s\t",m->mima_user); printf("账户余额:¥ %d",m->purse); m=m->next; printf("\n\n"); } printf("->按任意键继续!"); getch(); } void print_repairman_(NODE_REPAIRMAN *m) { int i=0; char n[10]; if(w==0) { printf("\n-->还没有人申请哦!\n"); printf("\n->请按任意键继续。"); return; } printf("-->正等待认证通过\n\n\n"); while(m!=NULL) { i++; printf("第%d个申报维修人员:\t",i); printf("用户名:%s\t\t",m->name_repairman); printf("账号:%s\t\t",m->number_repairman); printf("密码:%s\t\t",m->mima_repairman); printf("\n\n是否通过?(y/n):"); scanf("%s",n); if(strcmp(n,"y")==0 || strcmp(n,"Y")==0) { printf("\n\n->已通过认证!\n"); savefile_repairman(m); } if(strcmp(n,"n")==0 || strcmp(n,"N")==0) { printf("\n\n->已驳回申诉!\n"); } m=m->next; printf("\n\n"); } savefile_repairman_check_1(); } void print_repairman_1(NODE_REPAIRMAN *m) { int i=0; while(m!=NULL) { i++; printf("第%d个维修人员:",i); printf("用户名:%-15s",m->name_repairman); printf("账号:%-18s",m->number_repairman); printf("密码:%s",m->mima_repairman); m=m->next; printf("\n\n"); } } void print_repairman () //输出报修单车信息 { NODE *m; m=readfile_user_bike(); if(k==0) printf("车牌号 密码 停放地点\n\n"); while(m!=NULL) { printf("%s\t\t",m->number); printf("%s\t ",m->mima); if(strcmp(m->address,"0")==0) printf("长安广场"); if(strcmp(m->address,"1")==0) printf("南大学城"); if(strcmp(m->address,"2")==0) printf("三森"); if(strcmp(m->address,"3")==0) printf("紫薇都市"); if(strcmp(m->address,"4")==0) printf("韦曲西街"); if(strcmp(m->address,"5")==0) printf("航天城"); if(strcmp(m->address,"6")==0) printf("韦曲南站"); if(strcmp(m->address,"7")==0) printf("秦岭沿线"); m=m->next; printf("\n\n"); } } void welcome() //输入密钥进入管理员 { int i=0; char c; char password[100]; char num[100]; strcpy(num,"152323"); loopback3: system("cls"); printf(" \n\n\n\n\n\n\n\n"); printf("\t\t\t\t欢迎使用共享单车管理系统!\n\n\n"); printf("\t\t\t\t请输入管理员密码:"); while((c=getch())!=13) { if(c==8) { printf("\b \b"); i--; continue; } password[i++]=c; putchar('*'); } password[i]='\0'; if(strcmp(password,num)==0) { system("cls"); } else { printf("\t\t\t\t 密码错误!"); //密码错误重新输出 Sleep(100); system("cls"); goto loopback3; } } void user (NODE_USER *l) { time_t first,second; double s; int p=1,q=0,t=0; char n[100],yn[100],h[100]; NODE *m,*g,*v,*y; NODE_USER *o,*k,*f; int flag; int z = 4,d; f=k=o=readfile_user(); while(k!=NULL) { if(strcmp(l->number_user,k->number_user)==0) break; k=k->next; } printf("\n"); printf("-->用户端"); while (1) { q=0; Gotoxy(53, 4); printf("1.附近的车"); Gotoxy(53, 6); printf("2.立即用车"); Gotoxy(53, 8); printf("3.立即还车"); Gotoxy(53, 10); printf("4.我要报修"); Gotoxy(53, 12); printf("5.我的信息"); Gotoxy(53, 14); printf("6.我去充值"); Gotoxy(53, 16); printf("0.退出登录"); Gotoxy(52, z); printf("★"); flag = _getch(); if (flag == Down) { z=z+2; if (z == 18) z = 4; } if (flag == Up) { z=z-2; if (z == 2) z = 16; } if (flag == 13) { if(z == 4) { system("cls"); menu_1(); printf("请选择您所在的地点代号:"); scanf("%s",h); y=v=readfile(); while(y!=NULL) { if(strcmp(y->address,h)==0) { t++; } y=y->next; } if(t!=0) printf("车牌号 密码 停放地点\n\n"); while(v!=NULL) { if(strcmp(v->address,h)==0) { q=1; printf("%s\t \t",v->number); printf("%s\t ",v->mima); if(strcmp(v->address,"0")==0) printf("长安广场"); if(strcmp(v->address,"1")==0) printf("南大学城"); if(strcmp(v->address,"2")==0) printf("三森"); if(strcmp(v->address,"3")==0) printf("紫薇都市"); if(strcmp(v->address,"4")==0) printf("韦曲西街"); if(strcmp(v->address,"5")==0) printf("航天城"); if(strcmp(v->address,"6")==0) printf("韦曲南站"); if(strcmp(v->address,"7")==0) printf("秦岭沿线"); printf("\n"); } v=v->next; } if(q==0) { printf("\n\n->这里的小车都被骑走啦!"); Sleep(500); } printf("\n"); getch(); system("cls"); } if (z == 6) { system("cls"); if(k->h==1) { printf("->您已经在使用共享单车了!一个账号只能同时租一个哦!\n"); printf("->按任意键继续。。。\n"); getch(); } else { system("cls"); g=look_for (k); first=time(NULL); printf("->按任意键继续。。。\n"); getch(); } _getch(); } if (z == 8) { system("cls"); if(k->h==1) { send_back(g); second=time(NULL); s=difftime(second,first); k->h=0; } else { printf("还没有借车呐!快去骑共享单车哦!\n\n"); goto mn; } while(1) { if(s > 1800.0) { s=s-1800.0; p++; } else break; } system("cls"); if(p==1) { k->purse=k->purse-1; printf("您总共骑行%0.1f秒,您需要支付 $1 yuan\n",s); printf("\n\n账户余额%d元",k->purse); savefile_user_(o); } else printf("您总共骑行%0.1f秒,您需要支付 $%d yuan\n",s,p); mn: _getch(); } if (z == 10) { system("cls"); loop__1: while(1) { printf("请输入您要报修的共享单车的车牌号:"); scanf("%s",n); m=look_for_bike (n); if(m!=0) { break; } } printf("您确定要报修吗?(y/n)"); scanf("%s",yn); for(;;) { if(strcmp(yn,"y")==0||strcmp(yn,"Y")==0) { printf("感谢您的反馈!如果我们确认申报无误的话,会给您加分哦!\n"); savefile_user_bike(m); break; } else if(strcmp(yn,"n")==0||strcmp(yn,"N")==0) { printf("->已取消操作!\n"); Sleep(500); system("cls"); break; } else if(strcmp(yn,"y")!=0 && strcmp(yn,"Y")!=0 && strcmp(yn,"n")!=0 && strcmp(yn,"N")!=0) { printf("亲!只能输入y/n哦!手误的话重新输入吧!^_^\n"); Sleep(500); system("cls"); goto loop__1; } } _getch(); } if (z == 12) { system("cls"); look_for_user (l); printf("浏览完毕后,按任意键继续!\n"); _getch(); } if (z == 14) { system("cls"); printf("您已绑定充值卡!请输入充值金额:"); scanf("%d",&d); while(f!=NULL) { if(strcmp(l->number_user,f->number_user)==0) break; f=f->next; } printf("\n当前余额%d元,充值后为%d元",f->purse,f->purse+d); f->purse=f->purse+d; savefile_user_(o); printf("\n\n->充值成功!"); Sleep(1000); system("cls"); } if (z == 16) { return; } } } } void repairman_ (NODE_REPAIRMAN *l) { int flag; int z = 8; system("cls"); printf("\n->维修员端"); while (1) { Gotoxy(53, 8); printf("1.我的信息"); Gotoxy(53, 10); printf("2.用户报修车辆"); Gotoxy(53, 12); printf("0.返回上一层"); Gotoxy(52, z); printf("★"); flag = _getch(); if (flag == Down) { z=z+2; if (z == 14) z = 8; } if (flag == Up) { z=z-2; if (z == 6) z = 12; } if (flag == 13) { if (z == 8) { system("cls"); look_for_repairman (l); _getch(); } if (z == 10) { system("cls"); print_repairman (); _getch(); } if (z == 12) //权限在老师端之上才能注册 { system("cls"); return; } } } } void admin () { NODE_USER *m; welcome(); NODE *phead; int flag; int l = 4; printf("\n"); printf("-->管理员端"); while (1) { Gotoxy(53, 4); printf("1.添加单车"); Gotoxy(53, 6); printf("2.删除单车"); Gotoxy(53, 8); printf("3.修改单车密码"); Gotoxy(53, 10); printf("4.查找单车"); Gotoxy(53, 12); printf("5.所有单车及其盈利"); Gotoxy(53, 14); printf("6.用户信息"); Gotoxy(53, 16); printf("7.维修员信息"); Gotoxy(53, 18); printf("0.退出登录"); Gotoxy(52, l); printf("★"); flag = _getch(); if (flag == Down) { l=l+2; if (l == 20) l = 4; } if (flag == Up) { l=l-2; if (l == 2) l = 18; } if (flag == 13) { if (l == 4) { system("cls"); phead=input (); printf("\a 保存成功!"); Sleep(500); system("cls"); _getch(); } if (l == 6) { system("cls"); delete_node (); system("cls"); _getch(); } if (l == 8) { system("cls"); modify (); system("cls"); _getch(); } if (l == 10) { system("cls"); look_for_0(); system("cls"); _getch(); } if (l == 12) { system("cls"); printf("--->读取成功!\n\n"); print() ; getch(); // system("cls"); _getch(); } if (l == 14) { system("cls"); m=readfile_user(); print_user(m); system("cls"); _getch(); } if (l == 16) { system("cls"); check(); system("cls"); _getch(); } if (l == 18) { system("cls"); return; } } } } void choice() { char c[5]; int flag; int z = 8; while (1) { Gotoxy(53, 8); printf("1.登录"); Gotoxy(53, 10); printf("2.注册"); Gotoxy(53, 12); printf("3.退出"); Gotoxy(52, z); printf("★"); flag = _getch(); if (flag == Down) { z=z+2; if (z == 14) z = 8; } if (flag == Up) { z=z-2; if (z == 6) z = 12; } if (flag == 13) { if (z == 8) { sign_in (); } if (z == 10) { NODE_USER *m,*n; m=(NODE_USER *)malloc(LEN_); m->next=NULL; NODE_REPAIRMAN *k,*l; k=(NODE_REPAIRMAN *)malloc(LEN_1); k->next=NULL; system("cls"); printf("注册用户请按1\t注册维修员请按2(需要等待审核)\n\n"); printf("请选择:"); scanf("%s",c); if(strcmp(c,"1")==0) { printf("★亲!请按照指示操作完成用户注册哦!\n"); for(;;) { printf("\n\n请输入绑定的手机号(账号):"); scanf("%s",m->number_user); //报修时查找单车信息 n=readfile_user(); while(n!=NULL) { if(strcmp(n->number_user,m->number_user)==0) { printf("亲!这个手机号已经被注册过了呦!"); break; } n=n->next; } if(n==NULL) { printf("\t\t\t\t\t-------这个账号还没有人注册过呢!"); break; } printf("\n"); } for(;;) { printf("\n\n请设置密码:"); scanf("%s",m->mima_user); if(strlen(m->mima_user)<=2) printf("\t\t\t\t\t安全系数★★,很不安全哦!"); if(strlen(m->mima_user)<=6&&strlen(m->mima_user)>2) printf("\t\t\t\t\t安全系数★★★,一般安全!"); if(strlen(m->mima_user)>7) printf("\t\t\t\t\t安全系数★★★★★,非常安全!"); printf("\n\n请确认密码:"); scanf("%s",m->mima_user2); printf("\n\n请输入您的年龄:"); scanf("%d",&m->age); if(m->age <= 10) { printf("年龄过小哦!长大再骑吧!共享单车伴你成长!\n"); system("cls"); break; } if(m->age >= 65) { printf("您已超过使用年限!抱歉!\n"); system("cls"); break; } if(strcmp(m->mima_user,m->mima_user2)==0) { system("cls"); submit(); printf("\n->注册成功!"); printf("\n\n快为自己起一个霸气的用户名吧!\n"); scanf("%s",m->name_user); printf("\n\n请先给自己钱包充值哦!(200元)"); printf("\n\n请输入充值卡号(系统将自动为您扣除):"); scanf("%s",m->bank_card); m->purse=200; savefile_user(m); break; } if(strcmp(m->mima_user,m->mima_user2)!=0) { printf("\a亲,两次输入密码不一样哦!\n"); Sleep(500); } } } if(strcmp(c,"2")==0) { printf("★亲!请按照指示操作完成维修员注册哦!\n"); for(;;) { printf("\n\n请输入绑定的手机号(账号):"); scanf("%s",k->number_repairman); getchar(); l=readfile_repairman(); while(l!=NULL) { if(strcmp(l->number_repairman,k->number_repairman)==0) { printf("亲!这个手机号已经被注册过了呦!"); break; } l=l->next; } if(l==NULL) { printf("\t\t\t\t\t-------这个账号还没有人注册过呢!"); break; } printf("\n"); } for(;;) { printf("\n\n请设置密码:"); scanf("%s",k->mima_repairman); getchar(); if(strlen(k->mima_repairman)<=2) printf("\t\t\t\t\t安全系数★★,很不安全哦!"); if(strlen(k->mima_repairman)<=6&&strlen(k->mima_repairman)>2) printf("\t\t\t\t\t安全系数★★★,一般安全!"); if(strlen(k->mima_repairman)>7) printf("\t\t\t\t\t安全系数★★★★★,非常安全!"); printf("\n\n请确认密码:"); scanf("%s",k->mima_repairman2); printf("\n\n请输入您的年龄:"); scanf("%d",&k->age); getchar(); if(k->age <= 10) { printf("年龄过小哦!不能注册维修员,共享单车伴你成长!\n"); system("cls"); break; } if(k->age >= 65) { printf("您已超过使用年限!抱歉!\n"); system("cls"); break; } if(strcmp(k->mima_repairman,k->mima_repairman2)==0) { system("cls"); submit(); printf("\n->申请成功!等待管理员审核!"); printf("\n\n快为自己起一个霸气的用户名吧!\n"); scanf("%s",k->name_repairman); savefile_repairman_check(k); break; } if(strcmp(k->mima_repairman,k->mima_repairman2)!=0) { printf("\a亲,两次输入密码不一样哦!\n"); Sleep(500); } } } _getch(); } if (z == 12) { goodbye(); exit(0); } } } } // admin(); //管理员 // user(); //用户 //repairman(); //维修员 int main (void) { system("color F1"); show (); system("cls"); choice(); }
加载全部内容