C語言實現共享單車管理系統
本文實例為大傢分享瞭C語言實現共享單車管理系統的具體代碼,供大傢參考,具體內容如下
1.功能模塊圖;
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(); }
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。