C語言版停車位管理系統(tǒng)
本文實例為大家分享了C語言實現(xiàn)停車位管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
簡單功能介紹
1、錄入車輛信息
2、查找車輛信息
3、刪除車輛信息
4、修改車輛信息
5、查找區(qū)域車輛信息
6、排序(按照車主姓名排序)
7、展示所有車輛信息
8、將錄入的數(shù)據(jù)保存在文件中
9、將文件中的數(shù)據(jù)讀出
算法構(gòu)造
鏈表的增刪改查
- 結(jié)構(gòu)體的定義
typedef struct Parking { ? ? char name[20]; ? ? ? ?//車主姓名 ? ? char carname[10]; ? ? //車牌號 ? ? long information; ? ? //車主聯(lián)系方式 ? ? char region; ? ? ? ? ?//車位區(qū)域編號 ? ? int num; ? ? ? ? ? ? ?//車位編號 ? ? struct Parking *next; //指針 }Parking;
- 錄入車輛信息
利用尾插法插入新添加的數(shù)據(jù)
Parking *Addcar(Parking *head) ? ? ?//錄入車輛信息 { ? ? int x; ? ? system("cls"); ?//清屏操作 ? ? system("color B"); ? //改變字體顏色 ? ? Parking *p = head; ? ? while(p->next!=NULL) ? //利用尾插法插入新用戶信息 ? ? { ? ? ? ? p = p->next; ? ? } ? ? printf("輸入需要添加的車輛個數(shù):"); ? ? scanf("%d", &x); ? ? while(x--) ? //輸入用戶信息 ? ? { ? ? ? ? system("cls"); ? ? ? ? Parking *Node = (Parking *)malloc(sizeof(Parking)); ? ? ? ? printf("\n輸入用戶姓名:"); ? ? ? ? scanf("%s",Node->name); ? ? ? ? printf("\n輸入車牌號:"); ? ? ? ? scanf("%s",Node->carname); ? ? ? ? printf("\n輸入車主聯(lián)系方式:"); ? ? ? ? scanf("%ld",&Node->information); ? ? ? ? printf("\n輸入車位區(qū)域編號:"); ? ? ? ? getchar(); ? ? ? ? scanf("%c",&Node->region); ? ? ? ? printf("\n輸入車位編號:"); ? ? ? ? scanf("%d",&Node->num); ? ? ? ? Node->next=NULL; ? ? ? ? p->next = Node; ? ? ? ? p = p->next; ? ? } ? ? printf("\n輸入完成!"); ? ? F(head); ? //打印添加后的用戶信息 ? ? printf("\n按任意鍵返回主頁\n"); ? ? getch(); ? ?//用來顯示結(jié)果 ? ? return head; }
- 刪除用戶信息
根據(jù)用戶名匹配查找用戶信息進行刪除
Parking *Delete(Parking *head) ? ? ?//刪除用戶信息 { ? ? char name[20]; ? ? system("cls"); ? ? system("color B"); ? ? printf("\n\t\t輸入你要刪除的用戶姓名:"); ? ? scanf("%s", name); ? ? Parking *p = head; ? ? Parking *q = p->next; ? ? while(q) ? //找到需要刪除數(shù)據(jù)的前結(jié)點 ? ? { ? ? ? ? if(strcmp(q->name,name)==0) ?//判斷字符串是否相等函數(shù) ? ? ? ? { ? ? ? ? ? ? p->next = q->next; ? ? ? ? ? ? free(q); ?//釋放內(nèi)存空間 ? ? ? ? ? ? break; ? ? ? ? } ? ? ? ? p = q; ? ? ? ? q = p->next; ? ? } ? ? if(p->next==NULL) ? ? { ? ? ? ? printf("\n\t\t未找到該用戶信息!"); ? ? } ? ? else ? ? { ? ? ? ? printf("\n\t\t刪除成功!!"); ? ? ? ? F(head); ? ? } ? ? printf("\n\t\t按任意鍵返回主菜單"); ? ? getch(); ? ? return head; }
- 查找用戶信息
根據(jù)字符串匹配查找用戶信息
void ?Find(Parking *head) ? ? ?//查找用戶信息 { ? ? system("cls"); ? ? system("color B"); ? ? char name[20]; ? ? printf("\n\t\t輸入你要查找的用戶姓名:"); ? ? scanf("%s", name); ? ? Parking *p = head; ? ? while(p->next) ? ? { ? ? ? ? if(strcmp(p->next->name,name)==0) ? ? ? ? { ? ? ? ? ? ? printf("找到了!\n"); ? ? ? ? ? ? printf("該用戶的信息如下:"); ? ? ? ? ? ? printf("\n\t\t---用戶姓名 ? ? ? ? ? ?%s",p->next->name); ? ? ? ? ? ? printf("\n\t\t---車牌號 ? ? ? ? ? ? ?%s",p->next->carname); ? ? ? ? ? ? printf("\n\t\t---車主聯(lián)系方式 ? ? ? ?%ld",p->next->information); ? ? ? ? ? ? printf("\n\t\t---車位區(qū)域編號 ? ? ? ?%c",p->next->region); ? ? ? ? ? ? printf("\n\t\t---車位編號 ? ? ? ? ? ?%d",p->next->num); ? ? ? ? ? ? break; ? ? ? ? } ? ? ? ? p = p->next; ? ? } ? ? if(p->next==NULL) ? ? ? ? printf("\n\t\t沒有找到該用戶信息"); ? ? printf("\n\t\t按任意鍵返回主菜單"); ? ? getch(); }
- 修改用戶信息
查找用戶找到后顯示該用戶的信息,根據(jù)用戶選擇修改信息
Parking *Change(Parking *head) ? ? ?//修改用戶信息 { ? ? char name[20]; ? ? system("cls"); ? ? system("color B"); ? ? printf("輸入需要修改的用戶姓名:"); ? ? scanf("%s", name); ? ? Parking *p = head->next; ? ? while(p) ? ? { ? ? ? ? if(strcmp(p->name,name)==0) ? ? ? ? { ? ? ? ? ? ? system("cls"); ? ? ? ? ? ? system("color B"); ? ? ? ? ? ? int x; ? ? ? ? ? ? printf("\n\t\t ? ? ? ? ? ? ? ? ? ? ? ? ? --該用戶信息-- ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?\n\n"); ? ? ? ? ? ? printf("\t---------------------------------------------------------------------\n"); ? ? ? ? ? ? printf("\t車主姓名--------車牌號-------車主聯(lián)系方式---車位區(qū)域編號-----車位編號----\n"); ? ? ? ? ? ? printf("\t%-17s%-16s%-15ld%-16c%-17d\n", p->name, p->carname, p->information, p->region, p->num); ? ? ? ? ? ? printf("\n輸入你要修改的信息編號:\n"); ? ? ? ? ? ? printf(" ? ? 1-車主姓名 ? ?\n"); ? ? ? ? ? ? printf(" ? ? 2-車牌號 ? ? ?\n"); ? ? ? ? ? ? printf(" ? ? 3-車主聯(lián)系方式 \n"); ? ? ? ? ? ? printf(" ? ? 4-車位區(qū)域編號 \n"); ? ? ? ? ? ? printf(" ? ? 5-車位編號 ? ? \n"); ? ? ? ? ? ? scanf("%d", &x); ? ? ? ? ? ? switch(x) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? case 1: ? ? ? ? ? ? ? ? ? ? printf("\n\t輸入修改后的信息"); ? ? ? ? ? ? ? ? ? ? scanf("%s", p->name); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case 2: ? ? ? ? ? ? ? ? ? ? printf("\n\t輸入修改后的信息"); ? ? ? ? ? ? ? ? ? ? scanf("%s", p->carname); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case 3: ? ? ? ? ? ? ? ? ? ? printf("\n\t輸入修改后的信息"); ? ? ? ? ? ? ? ? ? ? scanf("%ld", &p->information); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case 4: ? ? ? ? ? ? ? ? ? ? printf("\n\t輸入修改后的信息"); ? ? ? ? ? ? ? ? ? ? scanf("%c", &p->region); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case 5: ? ? ? ? ? ? ? ? ? ? printf("\n\t輸入修改后的信息"); ? ? ? ? ? ? ? ? ? ? scanf("%d", &p->num); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? } ? ? ? ? ? ? printf("\n\t\t修改后的用戶信息為"); ? ? ? ? ? ? printf("\t車主姓名--------車牌號-------車主聯(lián)系方式---車位區(qū)域編號-----車位編號----\n"); ? ? ? ? ? ? printf("\t%-17s%-16s%-15ld%-16c%-17d\n", p->name, p->carname, p->information, p->region, p->num); ? ? ? ? ? ? break; ? ? ? ? } ? ? ? ? p = p->next; ? ? } ? ? if(p==NULL) ? ? { ? ? ? ? printf("\n未找到相應(yīng)用戶"); ? ? ? ? printf("\n按任意鍵返回主頁\n"); ? ? ? ? getch(); ? ? ? ? return head; ? ? } ? ? printf("\n修改完成!"); ? ? F(head); ?//顯示修改后的全部信息 ? ? printf("\n按任意鍵返回主頁\n"); ? ? getch(); ? ? return head; }
其他鏈表操作
- 排序(根據(jù)用戶姓名排序)
void *Sort(Parking *head) ? //排序 { ? ? Parking *p=head; ? ? Parking *q,*p1=NULL,*p2=NULL; ? ? while(p->next != NULL) ? ? { ? ? ? ? q = p->next; ? ? ? ? while(q->next != NULL) ? ? ? ? { ? ? ? ? ? ? if(strcmp(p->next->name,q->next->name)>0) ?//字符串比較 ? ? ? ? ? ? { ? ? ? ? ? ? ? ? p1 = p->next; ?//記錄p與q的下一結(jié)點 ? ? ? ? ? ? ? ? p2 = q->next; ? ? ? ? ? ? ? ? q->next = q->next->next; ? ? ? ? ? ? ? ? p->next = p2; ? ? ? ? ? ? ? ? p2->next = p1; ? ? ? ? ? ? } ? ? ? ? ? ? else ? ? ? ? ? ? q = q->next; ? ? ? ? } ? ? ? ? p = p->next; ? ? } ? ? F(head); ? ? printf("\n\t\t按任意鍵返回主菜單"); ? ? getch(); }
- 查找區(qū)域車輛信息
void RegionalVehicles(Parking *head) ? //尋找指定區(qū)域內(nèi)車輛信息 { ? ? system("cls"); ? ? system("color B"); ? ? char c; ? ? printf("\n\t\t輸入你想要查看的區(qū)域"); ? ? getchar(); ? ? scanf("%c", &c); ? ? Parking *p = head->next; ? ? printf("\n\t\t ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--%c區(qū)域內(nèi)車輛用戶信息-- ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?\n\n",c); ? ? printf("\t---------------------------------------------------------------------\n"); ? ? printf("\t車主姓名--------車牌號-------車主聯(lián)系方式---車位區(qū)域編號-----車位編號----\n"); ? ? while(p) ? ? ? ? { ? ? ? ? ? ? if(p->region==c) ?//判斷區(qū)域字符與輸入字符是否相等,相等則輸出 ? ? ? ? ? ? { ? ? ? ? ? ? ? ? printf("\t%-17s%-16s%-15ld%-16c%-17d\n", p->name, p->carname, p->information, p->region, p->num); ? ? ? ? ? ? } ? ? ? ? ? ? p = p->next; ? ? ? ? } ? ? printf("\n\t\t按任意鍵返回主菜單"); ? ? getch(); }
文件的讀取與輸入
- 將數(shù)據(jù)保存在文件中
之所以用w形式打開文件是因為我在程序運行前已將文件內(nèi)數(shù)據(jù)讀出,最后進行保存數(shù)據(jù)時覆蓋原數(shù)據(jù)不會導(dǎo)致原數(shù)據(jù)丟失
void ?Preservation(Parking *head) ? //保存數(shù)據(jù)在文件中 { ? ? const char* filename1 = "C:/Users/judicious/Desktop/car.text"; ?//文件路徑 ? ? FILE *fp = fopen(filename1, "w"); ?//以寫的方式打開文件,若文件不存在,則建立新的文件。若文件內(nèi)有內(nèi)容則會覆蓋原有內(nèi)容 ? ? if (fp == NULL) ? //判斷是否成功打開 ?? ?{ ?? ? ? ?puts("Fail to open file!"); ?? ? ? ?exit(1); ?? ?} ? ? Parking * p = head->next; ? ? while(p) ? ? { ? ? ? ? fprintf(fp,"%s %s %ld %c %d\n", p->name, p->carname, p->information, p->region, p->num); ?//向文件內(nèi)輸入數(shù)據(jù) ? ? ? ? p = p->next; ? ? } ? ? fclose(fp); ?//關(guān)閉文件 ? ? return; }
- 將文件中數(shù)據(jù)讀出
將文件內(nèi)數(shù)據(jù)讀出并保存在鏈表當(dāng)中,方便對數(shù)據(jù)進行修改
Parking *Read() ? //讀取文件內(nèi)數(shù)據(jù) { ? ? const char* filename1 = "C:/Users/judicious/Desktop/car.text"; ? ? FILE *fp = fopen(filename1, "rt"); ?//以讀的方式打開文件 ? ? if (fp == NULL) ?? ?{ ?? ? ? ?puts("Fail to open file!"); ?? ? ? ?exit(1); ?? ?? ?} ? ? Parking *head = (Parking *)malloc(sizeof(Parking)); ?//為頭指針申請內(nèi)存空間 ? ? head->next = NULL; ? ? ? Parking *p1 = (Parking *)malloc(sizeof(Parking)); ?//申請存放數(shù)據(jù)的結(jié)點 ? ? p1->next = NULL; ? ? if(fscanf(fp, "%s %s %ld %c %d", p1->name, p1->carname, &p1->information, &p1->region, &p1->num)!=EOF) ?//判斷所讀文件內(nèi)容是否為空 ? ? { ? ? ? ? head->next=p1; ? ? ? ? Parking *tmp=head; ? ? ? ? while (tmp->next) ? //利用尾插法插入結(jié)點,確保讀出的數(shù)據(jù)安正序輸出 ? ? ? ? { ? ? ? ? ? ? tmp=tmp->next; ? ? ? ? } ? ? ? ? while(fgetc(fp)!=EOF) ?//判斷文件是否為空 ? ? ? ? { ? ? ? ? ? ?? ? ? ? ? ? ? Parking *p = (Parking *)malloc(sizeof(Parking)); ? ? ? ? ? ? fscanf(fp, "%s %s %ld %c %d", p->name, p->carname, &p->information, &p->region, &p->num); ? ? ? ? ? ? tmp->next=p; ? ? ? ? ? ? p->next=NULL; ? ? ? ? ? ? tmp = tmp->next; ? ? ? ? } ? ? ? ? Parking *p2 = head; ?//刪除最后一個結(jié)點 ? ? ? ? while(p2->next->next) ? ? ? ? { ? ? ? ? ? ? p2 = p2->next; ? ? ? ? } ? ? ? ? p2->next = NULL; ? ? } ? ? else ? ? ? ? return NULL; ? ? fclose(fp); ? ? return head->next; }
刪除最后一個結(jié)點的原因是我存入數(shù)據(jù)時每行數(shù)據(jù)后有一個換行符,fgetc()將換行符讀走,最后一行時也將換行符讀走。此時判斷文件不為空,繼續(xù)讀取內(nèi)容,所以最后一個結(jié)點內(nèi)的內(nèi)容為隨機值,因此刪除該結(jié)點。
主菜單
void menu() ? //主菜單 { ? ? Parking *head = (Parking *)malloc(sizeof(Parking)); ? ? head->next = Read(); ?//讀取文件信息 ? ? system("cls"); ? ? HideCursor(); ? //隱藏光標 ? ? int choice; ? ? do ? ? { ? ? ? ? system("cls"); ?//主頁面 ? ? ? ? printf("--------------------------------------------------------------"); ? ? ? ? printf("\n\n"); ? ? ? ? printf("********************歡迎來到停車位管理系統(tǒng)********************\n"); ? ? ? ? printf("\n\n"); ? ? ? ? printf("---------------------------------------------------------\n"); ? ? ? ? printf("\n ? ? ? ? ? ? ? ? 1- 錄入車輛信息 ? ? ? ? ? ? ? ? ? ? ? ?"); ? ? ? ? printf("\n ? ? ? ? ? ? ? ? 2- 查找車輛信息 ? ? ? ? ? ? ? ? ? ? ? ?"); ? ? ? ? printf("\n ? ? ? ? ? ? ? ? 3- 移除車輛信息 ? ? ? ? ? ? ? ? ? ? ? ?"); ? ? ? ? printf("\n ? ? ? ? ? ? ? ? 4- 修改車輛信息 ? ? ? ? ? ? ? ? ? ? ? ?"); ? ? ? ? printf("\n ? ? ? ? ? ? ? ? 5- 查找區(qū)域車輛信息 ? ? ? ? ? ? ? ? ? ? "); ? ? ? ? printf("\n ? ? ? ? ? ? ? ? 6- 展示所有車輛信息 ? ? ? ? ? ? ? ? ? ? "); ? ? ? ? printf("\n ? ? ? ? ? ? ? ? 7- 按車主姓名排序 ? ? ? ? ? ? ? ? ? ? ? "); ? ? ? ? printf("\n ? ? ? ? ? ? ? ? 0- 退出管理系統(tǒng)并保存數(shù)據(jù) ? ? ? ? ? ? ?\n"); ? ? ? ? printf("\n-------------------------------------------------------\n"); ? ? ? ? scanf("%d", &choice); ? ? ? ? switch(choice) ? ? ? ? { ? ? ? ? ? ? case 1: ? ? ? ? ? ? ? ? head = Addcar(head); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case 2: ? ? ? ? ? ? ? ? Find(head); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case 3: ? ? ? ? ? ? ? ? head = Delete(head); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case 4: ? ? ? ? ? ? ? ? head = Change(head); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case 5: ? ? ? ? ? ? ? ? RegionalVehicles(head); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case 6: ? ? ? ? ? ? ? ? F(head); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case 7: ? ? ? ? ? ? ? ? Sort(head); ? ? ? ? ? ? ? ? break; ? ? ? ? } ? ? } while (choice!=0); ? ? Preservation(head); ? //保存數(shù)據(jù) }
主函數(shù)
int main() { ? ? menu(); ? ? return 0; }
完整代碼
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <windows.h> //system("cls"):清屏 ? #include <conio.h> ?//getch() typedef struct Parking { ? ? char name[20]; ? ? ? ?//車主姓名 ? ? char carname[10]; ? ? //車牌號 ? ? long information; ? ? //車主聯(lián)系方式 ? ? char region; ? ? ? ? ?//車位區(qū)域編號 ? ? int num; ? ? ? ? ? ? ?//車位編號 ? ? struct Parking *next; //指針 }Parking; void HideCursor() ? ? //隱藏光標 { ?CONSOLE_CURSOR_INFO cursor_info = {1, 0};? ?SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info); } void ?F(Parking *head) ? //打印用戶信息 { ?? ? ? system("cls"); ? ? system("color B"); ? ? Parking *p = head->next; ? ? printf("\n\t\t ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--停車場用戶信息-- ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?\n\n"); ? ? printf("\t---------------------------------------------------------------------\n"); ? ? printf("\t車主姓名--------車牌號-------車主聯(lián)系方式---車位區(qū)域編號-----車位編號----\n"); ? ? while (p) ? ? { ? ? ? ? printf("\t%-17s%-16s%-15ld%-16c%-17d\n", p->name, p->carname, p->information, p->region, p->num); ? ? ? ? p = p->next; ? ? } ? ? getch(); ? ? return; } Parking *Addcar(Parking *head) ? ? ?//錄入車輛信息 { ? ? int x; ? ? system("cls"); ? ? system("color B"); ? ? Parking *p = head; ? ? while(p->next!=NULL) ? ? { ? ? ? ? p = p->next; ? ? } ? ? printf("輸入需要添加的車輛個數(shù):"); ? ? scanf("%d", &x); ? ? while(x--) ? ? { ? ? ? ? system("cls"); ? ? ? ? Parking *Node = (Parking *)malloc(sizeof(Parking)); ? ? ? ? printf("\n輸入用戶姓名:"); ? ? ? ? scanf("%s",Node->name); ? ? ? ? printf("\n輸入車牌號:"); ? ? ? ? scanf("%s",Node->carname); ? ? ? ? printf("\n輸入車主聯(lián)系方式:"); ? ? ? ? scanf("%ld",&Node->information); ? ? ? ? printf("\n輸入車位區(qū)域編號:"); ? ? ? ? getchar(); ? ? ? ? scanf("%c",&Node->region); ? ? ? ? printf("\n輸入車位編號:"); ? ? ? ? scanf("%d",&Node->num); ? ? ? ? Node->next=NULL; ? ? ? ? p->next = Node; ? ? ? ? p = p->next; ? ? } ? ? printf("\n輸入完成!"); ? ? F(head); ? ? printf("\n按任意鍵返回主頁\n"); ? ? getch(); ? ? return head; } Parking *Change(Parking *head) ? ? ?//修改用戶信息 { ? ? char name[20]; ? ? system("cls"); ? ? system("color B"); ? ? printf("輸入需要修改的用戶姓名:"); ? ? scanf("%s", name); ? ? Parking *p = head->next; ? ? while(p) ? ? { ? ? ? ? if(strcmp(p->name,name)==0) ? ? ? ? { ? ? ? ? ? ? system("cls"); ? ? ? ? ? ? system("color B"); ? ? ? ? ? ? int x; ? ? ? ? ? ? printf("\n\t\t ? ? ? ? ? ? ? ? ? ? ? ? ? --該用戶信息-- ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?\n\n"); ? ? ? ? ? ? printf("\t---------------------------------------------------------------------\n"); ? ? ? ? ? ? printf("\t車主姓名--------車牌號-------車主聯(lián)系方式---車位區(qū)域編號-----車位編號----\n"); ? ? ? ? ? ? printf("\t%-17s%-16s%-15ld%-16c%-17d\n", p->name, p->carname, p->information, p->region, p->num); ? ? ? ? ? ? printf("\n輸入你要修改的信息編號:\n"); ? ? ? ? ? ? printf(" ? ? 1-車主姓名 ? ?\n"); ? ? ? ? ? ? printf(" ? ? 2-車牌號 ? ? ?\n"); ? ? ? ? ? ? printf(" ? ? 3-車主聯(lián)系方式 \n"); ? ? ? ? ? ? printf(" ? ? 4-車位區(qū)域編號 \n"); ? ? ? ? ? ? printf(" ? ? 5-車位編號 ? ? \n"); ? ? ? ? ? ? scanf("%d", &x); ? ? ? ? ? ? switch(x) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? case 1: ? ? ? ? ? ? ? ? ? ? printf("\n\t輸入修改后的信息"); ? ? ? ? ? ? ? ? ? ? scanf("%s", p->name); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case 2: ? ? ? ? ? ? ? ? ? ? printf("\n\t輸入修改后的信息"); ? ? ? ? ? ? ? ? ? ? scanf("%s", p->carname); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case 3: ? ? ? ? ? ? ? ? ? ? printf("\n\t輸入修改后的信息"); ? ? ? ? ? ? ? ? ? ? scanf("%ld", &p->information); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case 4: ? ? ? ? ? ? ? ? ? ? printf("\n\t輸入修改后的信息"); ? ? ? ? ? ? ? ? ? ? scanf("%c", &p->region); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case 5: ? ? ? ? ? ? ? ? ? ? printf("\n\t輸入修改后的信息"); ? ? ? ? ? ? ? ? ? ? scanf("%d", &p->num); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? } ? ? ? ? ? ? printf("\n\t\t修改后的用戶信息為"); ? ? ? ? ? ? printf("\t車主姓名--------車牌號-------車主聯(lián)系方式---車位區(qū)域編號-----車位編號----\n"); ? ? ? ? ? ? printf("\t%-17s%-16s%-15ld%-16c%-17d\n", p->name, p->carname, p->information, p->region, p->num); ? ? ? ? ? ? break; ? ? ? ? } ? ? ? ? p = p->next; ? ? } ? ? if(p==NULL) ? ? { ? ? ? ? printf("\n未找到相應(yīng)用戶"); ? ? ? ? printf("\n按任意鍵返回主頁\n"); ? ? ? ? getch(); ? ? ? ? return head; ? ? } ? ? printf("\n修改完成!"); ? ? F(head); ? ? printf("\n按任意鍵返回主頁\n"); ? ? getch(); ? ? return head; } Parking *Delete(Parking *head) ? ? ?//刪除用戶信息 { ? ? char name[20]; ? ? system("cls"); ? ? system("color B"); ? ? printf("\n\t\t輸入你要刪除的用戶姓名:"); ? ? scanf("%s", name); ? ? Parking *p = head; ? ? Parking *q = p->next; ? ? while(q) ? ? { ? ? ? ? if(strcmp(q->name,name)==0) ? ? ? ? { ? ? ? ? ? ? p->next = q->next; ? ? ? ? ? ? free(q); ? ? ? ? ? ? break; ? ? ? ? } ? ? ? ? p = q; ? ? ? ? q = p->next; ? ? } ? ? if(p->next==NULL) ? ? { ? ? ? ? printf("\n\t\t未找到該用戶信息!"); ? ? } ? ? else ? ? { ? ? ? ? printf("\n\t\t刪除成功?。?); ? ? ? ? F(head); ? ? } ? ? printf("\n\t\t按任意鍵返回主菜單"); ? ? getch(); ? ? return head; } void ?Find(Parking *head) ? ? ?//查找用戶信息 { ? ? system("cls"); ? ? system("color B"); ? ? char name[20]; ? ? printf("\n\t\t輸入你要查找的用戶姓名:"); ? ? scanf("%s", name); ? ? Parking *p = head; ? ? while(p->next) ? ? { ? ? ? ? if(strcmp(p->next->name,name)==0) ? ? ? ? { ? ? ? ? ? ? printf("找到了!\n"); ? ? ? ? ? ? printf("該用戶的信息如下:"); ? ? ? ? ? ? printf("\n\t\t---用戶姓名 ? ? ? ? ? ?%s",p->next->name); ? ? ? ? ? ? printf("\n\t\t---車牌號 ? ? ? ? ? ? ?%s",p->next->carname); ? ? ? ? ? ? printf("\n\t\t---車主聯(lián)系方式 ? ? ? ?%ld",p->next->information); ? ? ? ? ? ? printf("\n\t\t---車位區(qū)域編號 ? ? ? ?%c",p->next->region); ? ? ? ? ? ? printf("\n\t\t---車位編號 ? ? ? ? ? ?%d",p->next->num); ? ? ? ? ? ? break; ? ? ? ? } ? ? ? ? p = p->next; ? ? } ? ? if(p->next==NULL) ? ? ? ? printf("\n\t\t沒有找到該用戶信息"); ? ? printf("\n\t\t按任意鍵返回主菜單"); ? ? getch(); } void RegionalVehicles(Parking *head) ? //尋找指定區(qū)域內(nèi)車輛信息 { ? ? system("cls"); ? ? system("color B"); ? ? char c; ? ? printf("\n\t\t輸入你想要查看的區(qū)域"); ? ? getchar(); ? ? scanf("%c", &c); ? ? Parking *p = head->next; ? ? printf("\n\t\t ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--%c區(qū)域內(nèi)車輛用戶信息-- ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?\n\n",c); ? ? printf("\t---------------------------------------------------------------------\n"); ? ? printf("\t車主姓名--------車牌號-------車主聯(lián)系方式---車位區(qū)域編號-----車位編號----\n"); ? ? while(p) ? ? ? ? { ? ? ? ? ? ? if(p->region==c) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? printf("\t%-17s%-16s%-15ld%-16c%-17d\n", p->name, p->carname, p->information, p->region, p->num); ? ? ? ? ? ? } ? ? ? ? ? ? p = p->next; ? ? ? ? } ? ? printf("\n\t\t按任意鍵返回主菜單"); ? ? getch(); } void *Sort(Parking *head) ? //排序 { ? ? Parking *p=head; ? ? Parking *q,*p1=NULL,*p2=NULL; ? ? while(p->next != NULL) ? ? { ? ? ? ? q = p->next; ? ? ? ? while(q->next != NULL) ? ? ? ? { ? ? ? ? ? ? if(strcmp(p->next->name,q->next->name)>0) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? p1 = p->next; ? ? ? ? ? ? ? ? p2 = q->next; ? ? ? ? ? ? ? ? q->next = q->next->next; ? ? ? ? ? ? ? ? p->next = p2; ? ? ? ? ? ? ? ? p2->next = p1; ? ? ? ? ? ? } ? ? ? ? ? ? else ? ? ? ? ? ? q = q->next; ? ? ? ? } ? ? ? ? p = p->next; ? ? } ? ? F(head); ? ? printf("\n\t\t按任意鍵返回主菜單"); ? ? getch(); } void ?Preservation(Parking *head) ? //保存數(shù)據(jù)在文件中 { ? ? const char* filename1 = "C:/Users/judicious/Desktop/car.text"; ? ? FILE *fp = fopen(filename1, "w"); ? ? if (fp == NULL) ?? ?{ ?? ? ? ?puts("Fail to open file!"); ?? ? ? ?exit(1); ?? ?} ? ? Parking * p = head->next; ? ? while(p) ? ? { ? ? ? ? fprintf(fp,"%s %s %ld %c %d\n", p->name, p->carname, p->information, p->region, p->num); ? ? ? ? p = p->next; ? ? } ? ? fclose(fp); ? ? return; } Parking *Read() ? //讀取文件內(nèi)數(shù)據(jù) { ? ? const char* filename1 = "C:/Users/judicious/Desktop/car.text"; ? ? FILE *fp = fopen(filename1, "rt"); ? ? if (fp == NULL) ?? ?{ ?? ? ? ?puts("Fail to open file!"); ?? ? ? ?exit(1); ?? ?? ?} ? ? Parking *head = (Parking *)malloc(sizeof(Parking)); ? ? head->next = NULL; ? ? Parking *p1 = (Parking *)malloc(sizeof(Parking)); ? ? p1->next = NULL; ? ? if(fscanf(fp, "%s %s %ld %c %d", p1->name, p1->carname, &p1->information, &p1->region, &p1->num)!=EOF) ? ? { ? ? ? ? head->next=p1; ? ? ? ? Parking *tmp=head; ? ? ? ? while (tmp->next) ? ? ? ? { ? ? ? ? ? ? tmp=tmp->next; ? ? ? ? } ? ? ? ? while(fgetc(fp)!=EOF) ? ? ? ? { ? ? ? ? ? ?? ? ? ? ? ? ? Parking *p = (Parking *)malloc(sizeof(Parking)); ? ? ? ? ? ? fscanf(fp, "%s %s %ld %c %d", p->name, p->carname, &p->information, &p->region, &p->num); ? ? ? ? ? ? tmp->next=p; ? ? ? ? ? ? p->next=NULL; ? ? ? ? ? ? tmp = tmp->next; ? ? ? ? } ? ? ? ? Parking *p2 = head; ? ? ? ? while(p2->next->next) ? ? ? ? { ? ? ? ? ? ? p2 = p2->next; ? ? ? ? } ? ? ? ? p2->next = NULL; ? ? } ? ? else ? ? ? ? return NULL; ? ? fclose(fp); ? ? return head->next; } void menu() ? //主菜單 { ? ? Parking *head = (Parking *)malloc(sizeof(Parking)); ? ? head->next = Read(); ?//讀取文件信息 ? ? system("cls"); ? ? HideCursor(); ? //隱藏光標 ? ? int choice; ? ? do ? ? { ? ? ? ? system("cls"); ? ? ? ? printf("--------------------------------------------------------------"); ? ? ? ? printf("\n\n"); ? ? ? ? printf("********************歡迎來到停車位管理系統(tǒng)********************\n"); ? ? ? ? printf("\n\n"); ? ? ? ? printf("---------------------------------------------------------\n"); ? ? ? ? printf("\n ? ? ? ? ? ? ? ? 1- 錄入車輛信息 ? ? ? ? ? ? ? ? ? ? ? ?"); ? ? ? ? printf("\n ? ? ? ? ? ? ? ? 2- 查找車輛信息 ? ? ? ? ? ? ? ? ? ? ? ?"); ? ? ? ? printf("\n ? ? ? ? ? ? ? ? 3- 移除車輛信息 ? ? ? ? ? ? ? ? ? ? ? ?"); ? ? ? ? printf("\n ? ? ? ? ? ? ? ? 4- 修改車輛信息 ? ? ? ? ? ? ? ? ? ? ? ?"); ? ? ? ? printf("\n ? ? ? ? ? ? ? ? 5- 查找區(qū)域車輛信息 ? ? ? ? ? ? ? ? ? ? "); ? ? ? ? printf("\n ? ? ? ? ? ? ? ? 6- 展示所有車輛信息 ? ? ? ? ? ? ? ? ? ? "); ? ? ? ? printf("\n ? ? ? ? ? ? ? ? 7- 按車主姓名排序 ? ? ? ? ? ? ? ? ? ? ? "); ? ? ? ? printf("\n ? ? ? ? ? ? ? ? 0- 退出管理系統(tǒng)并保存數(shù)據(jù) ? ? ? ? ? ? ?\n"); ? ? ? ? printf("\n-------------------------------------------------------\n"); ? ? ? ? scanf("%d", &choice); ? ? ? ? switch(choice) ? ? ? ? { ? ? ? ? ? ? case 1: ? ? ? ? ? ? ? ? head = Addcar(head); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case 2: ? ? ? ? ? ? ? ? Find(head); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case 3: ? ? ? ? ? ? ? ? head = Delete(head); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case 4: ? ? ? ? ? ? ? ? head = Change(head); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case 5: ? ? ? ? ? ? ? ? RegionalVehicles(head); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case 6: ? ? ? ? ? ? ? ? F(head); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case 7: ? ? ? ? ? ? ? ? Sort(head); ? ? ? ? ? ? ? ? break; ? ? ? ? } ? ? } while (choice!=0); ? ? Preservation(head); ? //保存數(shù)據(jù) } int main() { ? ? menu(); ? ? return 0; }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語言編程中統(tǒng)計輸入的行數(shù)以及單詞個數(shù)的方法
這篇文章主要介紹了C語言編程中統(tǒng)計輸入的行數(shù)以及單詞個數(shù)的方法,利用最基礎(chǔ)的循環(huán)和判斷語句寫成,需要的朋友可以參考下2015-11-11一篇文章帶你用C語言玩轉(zhuǎn)結(jié)構(gòu)體
本文主要介紹C語言 結(jié)構(gòu)體的知識,學(xué)習(xí)C語言肯定需要學(xué)習(xí)結(jié)構(gòu)體,這里詳細說明了結(jié)構(gòu)體并附示例代碼,供大家參考學(xué)習(xí),有需要的小伙伴可以參考下2021-09-09