C語(yǔ)言版停車位管理系統(tǒng)
本文實(shí)例為大家分享了C語(yǔ)言實(shí)現(xiàn)停車位管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
簡(jiǎn)單功能介紹
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]; ? ? //車牌號(hào)
? ? long information; ? ? //車主聯(lián)系方式
? ? char region; ? ? ? ? ?//車位區(qū)域編號(hào)
? ? int num; ? ? ? ? ? ? ?//車位編號(hào)
? ? 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("輸入需要添加的車輛個(gè)數(shù):");
? ? scanf("%d", &x);
? ? while(x--) ? //輸入用戶信息
? ? {
? ? ? ? system("cls");
? ? ? ? Parking *Node = (Parking *)malloc(sizeof(Parking));
? ? ? ? printf("\n輸入用戶姓名:");
? ? ? ? scanf("%s",Node->name);
? ? ? ? printf("\n輸入車牌號(hào):");
? ? ? ? scanf("%s",Node->carname);
? ? ? ? printf("\n輸入車主聯(lián)系方式:");
? ? ? ? scanf("%ld",&Node->information);
? ? ? ? printf("\n輸入車位區(qū)域編號(hào):");
? ? ? ? getchar();
? ? ? ? scanf("%c",&Node->region);
? ? ? ? printf("\n輸入車位編號(hào):");
? ? ? ? scanf("%d",&Node->num);
? ? ? ? Node->next=NULL;
? ? ? ? p->next = Node;
? ? ? ? p = p->next;
? ? }
? ? printf("\n輸入完成!");
? ? F(head); ? //打印添加后的用戶信息
? ? printf("\n按任意鍵返回主頁(yè)\n");
? ? getch(); ? ?//用來顯示結(jié)果
? ? return head;
}- 刪除用戶信息
根據(jù)用戶名匹配查找用戶信息進(jìn)行刪除
Parking *Delete(Parking *head) ? ? ?//刪除用戶信息
{
? ? char name[20];
? ? system("cls");
? ? system("color B");
? ? printf("\n\t\t輸入你要?jiǎng)h除的用戶姓名:");
? ? scanf("%s", name);
? ? Parking *p = head;
? ? Parking *q = p->next;
? ? while(q) ? //找到需要?jiǎng)h除數(shù)據(jù)的前結(jié)點(diǎn)
? ? {
? ? ? ? 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---車牌號(hào) ? ? ? ? ? ? ?%s",p->next->carname);
? ? ? ? ? ? printf("\n\t\t---車主聯(lián)系方式 ? ? ? ?%ld",p->next->information);
? ? ? ? ? ? printf("\n\t\t---車位區(qū)域編號(hào) ? ? ? ?%c",p->next->region);
? ? ? ? ? ? printf("\n\t\t---車位編號(hào) ? ? ? ? ? ?%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車主姓名--------車牌號(hào)-------車主聯(lián)系方式---車位區(qū)域編號(hào)-----車位編號(hào)----\n");
? ? ? ? ? ? printf("\t%-17s%-16s%-15ld%-16c%-17d\n", p->name, p->carname, p->information, p->region, p->num);
? ? ? ? ? ? printf("\n輸入你要修改的信息編號(hào):\n");
? ? ? ? ? ? printf(" ? ? 1-車主姓名 ? ?\n");
? ? ? ? ? ? printf(" ? ? 2-車牌號(hào) ? ? ?\n");
? ? ? ? ? ? printf(" ? ? 3-車主聯(lián)系方式 \n");
? ? ? ? ? ? printf(" ? ? 4-車位區(qū)域編號(hào) \n");
? ? ? ? ? ? printf(" ? ? 5-車位編號(hào) ? ? \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車主姓名--------車牌號(hào)-------車主聯(lián)系方式---車位區(qū)域編號(hào)-----車位編號(hào)----\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按任意鍵返回主頁(yè)\n");
? ? ? ? getch();
? ? ? ? return head;
? ? }
? ? printf("\n修改完成!");
? ? F(head); ?//顯示修改后的全部信息
? ? printf("\n按任意鍵返回主頁(yè)\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é)點(diǎn)
? ? ? ? ? ? ? ? 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車主姓名--------車牌號(hào)-------車主聯(lián)系方式---車位區(qū)域編號(hào)-----車位編號(hào)----\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形式打開文件是因?yàn)槲以诔绦蜻\(yùn)行前已將文件內(nèi)數(shù)據(jù)讀出,最后進(jìn)行保存數(shù)據(jù)時(shí)覆蓋原數(shù)據(jù)不會(huì)導(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)容則會(huì)覆蓋原有內(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)中,方便對(duì)數(shù)據(jù)進(jìn)行修改
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)); ?//為頭指針申請(qǐng)內(nèi)存空間
? ? head->next = NULL; ?
? ? Parking *p1 = (Parking *)malloc(sizeof(Parking)); ?//申請(qǐng)存放數(shù)據(jù)的結(jié)點(diǎn)
? ? 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é)點(diǎn),確保讀出的數(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; ?//刪除最后一個(gè)結(jié)點(diǎn)
? ? ? ? while(p2->next->next)
? ? ? ? {
? ? ? ? ? ? p2 = p2->next;
? ? ? ? }
? ? ? ? p2->next = NULL;
? ? }
? ? else
? ? ? ? return NULL;
? ? fclose(fp);
? ? return head->next;
}刪除最后一個(gè)結(jié)點(diǎn)的原因是我存入數(shù)據(jù)時(shí)每行數(shù)據(jù)后有一個(gè)換行符,fgetc()將換行符讀走,最后一行時(shí)也將換行符讀走。此時(shí)判斷文件不為空,繼續(xù)讀取內(nèi)容,所以最后一個(gè)結(jié)點(diǎn)內(nèi)的內(nèi)容為隨機(jī)值,因此刪除該結(jié)點(diǎn)。
主菜單
void menu() ? //主菜單
{
? ? Parking *head = (Parking *)malloc(sizeof(Parking));
? ? head->next = Read(); ?//讀取文件信息
? ? system("cls");
? ? HideCursor(); ? //隱藏光標(biāo)
? ? int choice;
? ? do
? ? {
? ? ? ? system("cls"); ?//主頁(yè)面
? ? ? ? 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]; ? ? //車牌號(hào)
? ? long information; ? ? //車主聯(lián)系方式
? ? char region; ? ? ? ? ?//車位區(qū)域編號(hào)
? ? int num; ? ? ? ? ? ? ?//車位編號(hào)
? ? struct Parking *next; //指針
}Parking;
void HideCursor() ? ? //隱藏光標(biāo)
{
?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 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--停車場(chǎng)用戶信息-- ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?\n\n");
? ? printf("\t---------------------------------------------------------------------\n");
? ? printf("\t車主姓名--------車牌號(hào)-------車主聯(lián)系方式---車位區(qū)域編號(hào)-----車位編號(hào)----\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("輸入需要添加的車輛個(gè)數(shù):");
? ? scanf("%d", &x);
? ? while(x--)
? ? {
? ? ? ? system("cls");
? ? ? ? Parking *Node = (Parking *)malloc(sizeof(Parking));
? ? ? ? printf("\n輸入用戶姓名:");
? ? ? ? scanf("%s",Node->name);
? ? ? ? printf("\n輸入車牌號(hào):");
? ? ? ? scanf("%s",Node->carname);
? ? ? ? printf("\n輸入車主聯(lián)系方式:");
? ? ? ? scanf("%ld",&Node->information);
? ? ? ? printf("\n輸入車位區(qū)域編號(hào):");
? ? ? ? getchar();
? ? ? ? scanf("%c",&Node->region);
? ? ? ? printf("\n輸入車位編號(hào):");
? ? ? ? scanf("%d",&Node->num);
? ? ? ? Node->next=NULL;
? ? ? ? p->next = Node;
? ? ? ? p = p->next;
? ? }
? ? printf("\n輸入完成!");
? ? F(head);
? ? printf("\n按任意鍵返回主頁(yè)\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車主姓名--------車牌號(hào)-------車主聯(lián)系方式---車位區(qū)域編號(hào)-----車位編號(hào)----\n");
? ? ? ? ? ? printf("\t%-17s%-16s%-15ld%-16c%-17d\n", p->name, p->carname, p->information, p->region, p->num);
? ? ? ? ? ? printf("\n輸入你要修改的信息編號(hào):\n");
? ? ? ? ? ? printf(" ? ? 1-車主姓名 ? ?\n");
? ? ? ? ? ? printf(" ? ? 2-車牌號(hào) ? ? ?\n");
? ? ? ? ? ? printf(" ? ? 3-車主聯(lián)系方式 \n");
? ? ? ? ? ? printf(" ? ? 4-車位區(qū)域編號(hào) \n");
? ? ? ? ? ? printf(" ? ? 5-車位編號(hào) ? ? \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車主姓名--------車牌號(hào)-------車主聯(lián)系方式---車位區(qū)域編號(hào)-----車位編號(hào)----\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按任意鍵返回主頁(yè)\n");
? ? ? ? getch();
? ? ? ? return head;
? ? }
? ? printf("\n修改完成!");
? ? F(head);
? ? printf("\n按任意鍵返回主頁(yè)\n");
? ? getch();
? ? return head;
}
Parking *Delete(Parking *head) ? ? ?//刪除用戶信息
{
? ? char name[20];
? ? system("cls");
? ? system("color B");
? ? printf("\n\t\t輸入你要?jiǎng)h除的用戶姓名:");
? ? 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---車牌號(hào) ? ? ? ? ? ? ?%s",p->next->carname);
? ? ? ? ? ? printf("\n\t\t---車主聯(lián)系方式 ? ? ? ?%ld",p->next->information);
? ? ? ? ? ? printf("\n\t\t---車位區(qū)域編號(hào) ? ? ? ?%c",p->next->region);
? ? ? ? ? ? printf("\n\t\t---車位編號(hào) ? ? ? ? ? ?%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車主姓名--------車牌號(hào)-------車主聯(lián)系方式---車位區(qū)域編號(hào)-----車位編號(hào)----\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(); ? //隱藏光標(biāo)
? ? 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;
}以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易停車場(chǎng)管理系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的停車場(chǎng)管理系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)游戲VIP停車場(chǎng)管理系統(tǒng)
- C語(yǔ)言源碼實(shí)現(xiàn)停車場(chǎng)管理系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單停車場(chǎng)管理系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)停車場(chǎng)管理系統(tǒng)
- C語(yǔ)言設(shè)計(jì)圖書登記系統(tǒng)與停車場(chǎng)管理系統(tǒng)的實(shí)例分享
- C語(yǔ)言實(shí)現(xiàn)停車管理系統(tǒng)
相關(guān)文章
C語(yǔ)言中對(duì)于循環(huán)結(jié)構(gòu)優(yōu)化的一些入門級(jí)方法簡(jiǎn)介
這篇文章主要介紹了C語(yǔ)言中對(duì)于循環(huán)結(jié)構(gòu)優(yōu)化的一些入門級(jí)方法,包括算法設(shè)計(jì)的改進(jìn)來提高一些并行性等方法,要的朋友可以參考下2015-12-12
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之順序表和單鏈表
在數(shù)據(jù)結(jié)構(gòu)中,線性表是入門級(jí)數(shù)據(jù)結(jié)構(gòu),線性表又分為順序表和鏈表,這篇文章主要給大家介紹了關(guān)于C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之順序表和單鏈表的相關(guān)資料,需要的朋友可以參考下2021-06-06
基于C語(yǔ)言實(shí)現(xiàn)點(diǎn)菜系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了基于C語(yǔ)言實(shí)現(xiàn)點(diǎn)菜系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11
Linux編程實(shí)現(xiàn)制作文件的ed2k鏈
這篇文章主要介紹了Linux編程實(shí)現(xiàn)制作文件的ed2k鏈的相關(guān)資料,需要的朋友可以參考下2015-03-03
C++中String的語(yǔ)法及常用接口的底層實(shí)現(xiàn)詳解
在C語(yǔ)言中,string是一個(gè)標(biāo)準(zhǔn)庫(kù)類(class),用于處理字符串,它提供了一種更高級(jí)、更便捷的字符串操作方式,string 類提供了一系列成員函數(shù)和重載運(yùn)算符,以便于對(duì)字符串進(jìn)行操作和處理,本編文章會(huì)對(duì)C++中的 string 進(jìn)行詳解,希望本篇文章會(huì)對(duì)你有所幫助2023-06-06
Qt實(shí)現(xiàn)部件透明陰影效果與不規(guī)則窗體詳解
這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)部件透明陰影效果與不規(guī)則窗體的相關(guān)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-01-01
C++類的自動(dòng)轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換的實(shí)現(xiàn)示例
類的自動(dòng)轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換是面向?qū)ο缶幊讨刑幚眍愋椭g轉(zhuǎn)換的兩種重要機(jī)制,本文就來介紹一下這兩種方法的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07
C++實(shí)現(xiàn)LeetCode(157.用Read4來讀取N個(gè)字符)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(157.用Read4來讀取N個(gè)字符),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07

