C語言實(shí)現(xiàn)自行車管理系統(tǒng)
在大家學(xué)完C語言后,經(jīng)常會被學(xué)校要求做很多管理系統(tǒng),主流做法當(dāng)選鏈表,但是很多問題就來了,在學(xué)習(xí)階段寫過最多基本上就是50行代碼左右了,一下子做個小型管理系統(tǒng)問題就比較多。小編當(dāng)然也是在學(xué)完初階C語言之后過了半年才完整做出來。
所以分享一下經(jīng)驗(yàn)。
1:首先數(shù)據(jù)結(jié)構(gòu):鏈表要會,而且要熟練掌握其增刪查改;
2:調(diào)試代碼要會,很多代碼一行一行的看到最后真的是很讓人頭大;
不會調(diào)試和監(jiān)控變量是個很痛苦的過程,就算寫出來bug多到炸也是很繁瑣的;
3:最關(guān)鍵的就是這個框架問題了,如果框架不好,這個代碼量會數(shù)倍上升,最后就是很多重疊的語句,很不美觀,并且代碼質(zhì)量不是很好,在寫系統(tǒng)之前一定要多看點(diǎn)小型管理系統(tǒng)的代碼,主要是學(xué)習(xí)框架如何建立,然后再根據(jù)自己的系統(tǒng)情況進(jìn)行改進(jìn)。
首先我們來看頭文件,先將能夠用到的頭文件一一羅列出來創(chuàng)建在
common.h文件里面。
#define _CRT_SECURE_NO_WARNINGS? #define Space 1000 #include<stdio.h> #include<Windows.h> #include<stdlib.h> #include<assert.h>//斷言 #include<stdbool.h> #include<string.h>
將定義宏等包含進(jìn)去。
其次就是這個框架了
#include"system.h" int main() { ?? ?CycleList myCycleList; ?? ?CycleListInit(&myCycleList); ?? ?int input = 0; ?? ?do ?? ?{ ?? ??? ?menu(); ?? ??? ?printf("請選擇->"); ?? ??? ?scanf("%d", &input); ?? ??? ?switch (input) ?? ??? ?{ ?? ??? ?case 1: ?? ??? ??? ?system("cls"); ?? ??? ??? ?LoginCycle(&myCycleList); ?? ??? ??? ?break; ?? ??? ?case 0: ?? ??? ??? ?system("cls"); ?? ??? ??? ?printf("自行車管理系統(tǒng)已經(jīng)退出\n"); ?? ??? ??? ?break; ?? ??? ?case 2: ?? ??? ??? ?system("cls"); ?? ??? ??? ?SearchCycle(&myCycleList); ?? ??? ??? ?break; ?? ??? ?case 3: ?? ??? ??? ?system("cls"); ?? ??? ??? ?ChangeCycle(&myCycleList); ?? ??? ??? ?break; ?? ??? ?case 4: ?? ??? ??? ?system("cls"); ?? ??? ??? ?PickUpCycle(&myCycleList); ?? ??? ??? ?_flushall(); ?? ??? ??? ?FileWrite(&myCycleList); ?? ??? ??? ?_flushall(); ?? ??? ??? ?break; ?? ??? ?case 5: ?? ??? ??? ?system("cls"); ?? ??? ??? ?PrintResSpace(&myCycleList); ?? ??? ??? ?break; ?? ??? ?default: ?? ??? ??? ?system("cls"); ?? ??? ??? ?printf("輸入有誤請重新選擇\n"); ?? ??? ??? ?break; ?? ??? ?} ?? ?} while (input); ?? ??? ?system("pause"); ?? ??? ?return 0; ?? ?}
再看各個功能的實(shí)現(xiàn)
為了避免函數(shù)代碼在一個文件里面十分的繁瑣,可以先創(chuàng)建一個.h文件將函數(shù)名和節(jié)點(diǎn)定義放進(jìn)去,看代碼。
#include"common.h" typedef struct Time { ?? ?int year; ?? ?int month; ?? ?int day; ?? ?int hour; }Time; typedef struct Cycle { ?? ?char CycleHoster[20];//自行車主名字 ?? ?int Sex; ?? ?int Age; ?? ?char IDcard[18];//身份證號 ?? ?Time partingTime; ? ? ?//存放時間 ?? ?int number;//自行車車位號 ?? ?struct Cycle* next; }CycleNode; typedef struct CycleList { ?? ?CycleNode *first; ?? ?CycleNode *last; ?? ?size_t ?space; }CycleList; void menu(); void LoginCycle(CycleList *plist);//登記自行車函數(shù) bool SearchCycle(CycleList* myBycycleList);//按照車位號查詢自行車 void ChangeCycle(CycleList* myBycycleList); void PickUpCycle(CycleList* myBycycleList); void PrintResSpace(CycleList* myBycycleList); void CycleListInit(CycleList *plist); CycleNode*_Buynode(char* p, int sex, int age, char* number, int Pnumber, int year, int month, int day, int hour); bool CycleListIsFull(CycleList *plist); CycleNode* SearchCycle1(CycleList* myBycycleList); void FileWrite(CycleList* myBycycleList); void DeleteCyNode(CycleList* myBycycleList,int key);
最后就是代碼函數(shù)功能的實(shí)現(xiàn)了。
#include"system.h" void menu() { ?? ?system("color 4"); ?? ?printf(" ? ? *********************************************************************** ? ? \n"); ?? ?printf(" ?************************歡迎使用自行車存放管理系統(tǒng)******************************* ? \n"); ?? ?printf("| ? ? ? ? ? ? ? ? ? ? ? ? ?自行車停車收費(fèi)標(biāo)準(zhǔn)2元一小時 ? ? ? ? ? ? ? ? ? ? ? ? ?|\n"); ?? ?printf("|\t1.--登記自行車停放位信息 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|\n"); ?? ?printf("|\t2.--查詢自行車停車位信息 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|\n"); ?? ?printf("|\t3.--修改自行車信息 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|\n"); ?? ?printf("|\t4.--用戶取車管理 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|\n"); ?? ?printf("|\t5.--顯示當(dāng)前空余自行車位信息 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|\n"); ?? ?printf("|\t0.--退出自行車管理系統(tǒng) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|\n"); ?? ?printf("| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |\n"); ?? ?printf("|*******************************************************************************|\n"); ?? ?printf("|********************>>>>楊天喆-計科(02)班-20190101134<<<<********************|\n"); ?? ?printf("|*******************************************************************************|\n\n"); } void LoginCycle(CycleList *plist) { ?? ? ?? ?if (!CycleListIsFull(plist)) ?? ?{ ?? ??? ?char name[20]; ?? ??? ?int age; ?? ??? ?int sex; ?? ??? ?char IDcard[18]; ?? ??? ?int hour; ?? ??? ?int Number; ?? ??? ?int year; ?? ??? ?int month; ?? ??? ?int day; ?? ??? ?printf("請輸入自行車主姓名\n"); ?? ??? ?scanf("%s",name); ?? ??? ?_flushall(); ?? ??? ?printf("請輸入性別(0代表男,1代表女)"); ?? ??? ?scanf("%d", &sex); ?? ??? ?printf("請輸入車主年齡"); ?? ??? ?scanf("%d", &age); ?? ??? ?printf("請輸入身份證號"); ?? ??? ?scanf("%s", IDcard); ?? ??? ?_flushall(); ?? ??? ?printf("請輸入停車時間(年,月,日,時)"); ?? ??? ?scanf("%d,%d,%d,%d",&year,&month,&day,&hour); ?? ??? ?printf("請輸入要停的位號(位號為1到2000)"); ?? ??? ?scanf("%d", &Number); ?? ??? ?plist->space++; ?? ??? ?plist->last->next = _Buynode(name, sex, age, IDcard, Number,year,month,day,hour); ?? ??? ?plist->last = _Buynode(name, sex, age, IDcard, Number, year, month, day, hour); ?? ??? ?FILE *fp = fopen("Test.txt", "a"); ?? ??? ?fprintf(fp, "%s %d %d %s %d %d %d %d %d %d\n", name,age,sex,IDcard,hour,Number,year,month,day,hour); ?? ??? ?fclose(fp); ?? ??? ?printf("登記成功\n"); ?? ??? ?printf("\n"); ?? ?} ?? ?else ?? ?{ ?? ??? ?printf("自行車位已滿,不能繼續(xù)停車"); ?? ?} } CycleNode* _Buynode(char* p, int sex, int age, char* number, int Pnumber, int year, int month, int day, int hour) { ?? ?CycleNode *s = (CycleNode*)malloc(sizeof(CycleNode)); ?? ?size_t sz = strlen(p)+1; ?? ?size_t sz1 = strlen(number)+1; ?? ?if (s == NULL) ?? ??? ?return NULL; ?? ?else ?? ?{ ?? ??? ?memcpy(s->CycleHoster,p,sz); ?? ??? ?s->Age = age; ?? ??? ?s->Sex = sex; ?? ??? ?s->partingTime.year = year; ?? ??? ?s->partingTime.month = month; ?? ??? ?s->partingTime.hour = hour; ?? ??? ?s->partingTime.day = day; ?? ??? ?memcpy(s->IDcard,number,sz1); ?? ??? ?s->number = Pnumber; ?? ??? ?s->next = NULL; ?? ??? ?return s; ?? ?} } void CycleListInit(CycleList *plist) { ?? ?char qname[20] = "姓名初始化"; ?? ?char qnumber[18] = "身份證初始化"; ?? ?CycleNode* p = _Buynode(qname, 0, 0, qnumber, 0, 0,0,0,0); ?? ?plist->first = plist->last = p; ?? ?plist->space = 0; } bool CycleListIsFull(CycleList *plist) { ?? ?if (plist->space > Space) ?? ??? ?return true; ?? ?return false; } bool SearchCycle(CycleList* myBycycleList) { ?? ?int num; ?? ?printf(" ? ? ?查詢客房信息\n"); ?? ?printf("請輸入要查詢自行車位號:\n"); ?? ?scanf("%d", &num); ?? ?CycleNode* p = myBycycleList->first->next; ?? ?while ((p) != NULL) ?? ?{ ?? ??? ?if (p->number == num) ?? ??? ?{ ?? ??? ??? ?printf("車主姓名:%s\n", p->CycleHoster); ?? ??? ??? ?(p)->Sex == 0 ? printf("男") : printf("女"); ?? ??? ??? ?printf("車主年齡 %d\n", p->Age); ?? ??? ??? ?printf("車主的身份證號為%s \n", p->IDcard); ?? ??? ??? ?printf("停車時間是 %d 年 %d ?月 ?%d 日 ?%d時\n", p->partingTime.year,p->partingTime.month,p->partingTime.day,p->partingTime.hour); ?? ??? ??? ?printf("停車位號為%d \n", p->number); ?? ??? ??? ?printf("查詢成功\n"); ?? ??? ??? ?printf("\n"); ?? ??? ??? ?return true; ?? ??? ?} ?? ??? ?p = p->next; ?? ?} ?? ?system("cls"); ?? ?printf("查詢失敗,此車位還未被停車\n"); ?? ?return false; } void ChangeCycle(CycleList* myBycycleList) { ?? ?int num; ?? ?int temp; ?? ?char Name[20]; ?? ?char Number[18]; ?? ?size_t sz1; ?? ?size_t sz2; ?? ?FILE *fp = fopen("Test.txt", "wt"); ?? ?int SEX; ?? ?int AGE; ?? ?printf("請輸入你要更改的信息的自行車位號\n"); ?? ?scanf("%d", &num); ?? ?CycleNode *p = myBycycleList->first; ?? ?while (p != NULL) ?? ?{ ?? ??? ?if (p->number == num) ?? ??? ?{ ?? ??? ??? ?printf("您所查詢的信息如下\n"); ?? ??? ??? ?SearchCycle(myBycycleList); ?? ??? ??? ?printf("請輸入你要更改的信息\n"); ?? ??? ??? ?printf("1:更改姓名\n"); ?? ??? ??? ?printf("2:更改性別\n");?? ??? ? ?? ??? ??? ?printf("3:更改年齡\n"); ?? ??? ??? ?printf("4:更改身份證號\n"); ?? ??? ??? ?scanf("%d", &temp); ?? ??? ??? ?switch (temp) ?? ??? ??? ?{ ?? ??? ??? ?case ?1: ?? ??? ??? ??? ?_flushall(); ?? ??? ??? ??? ?printf("請輸入新的姓名\n"); ?? ??? ??? ??? ?scanf("%s", Name); ?? ??? ??? ??? ?_flushall(); ?? ??? ??? ??? ?sz1 = strlen(Name)+1; ?? ??? ??? ??? ?memcpy(p->CycleHoster, Name, sz1); ?? ??? ??? ??? ?printf("更改成功,返回主菜單"); ?? ??? ??? ??? ?printf("\n"); ?? ??? ??? ??? ?return; ?? ??? ??? ?case 2: ?? ??? ??? ??? ?printf("請輸入性別:(0代表男)\n"); ?? ??? ??? ??? ??? ?scanf("%d", &SEX); ?? ??? ??? ??? ??? ?p->Sex = num; ?? ??? ??? ??? ??? ?printf("更改成功,返回主菜單"); ?? ??? ??? ??? ??? ?printf("\n"); ?? ??? ??? ??? ??? ?return; ?? ??? ??? ?case 3: ?? ??? ??? ??? ?printf("請輸入年齡\n"); ?? ??? ??? ??? ?scanf("%d", &AGE); ?? ??? ??? ??? ?p->Age = AGE; ?? ??? ??? ??? ?printf("更改成功,返回主菜單"); ?? ??? ??? ??? ?printf("\n"); ?? ??? ??? ??? ?return; ?? ??? ??? ?case 4: ?? ??? ??? ??? ?printf("請輸入身份證號\n"); ?? ??? ??? ??? ?scanf("%s", Number); ?? ??? ??? ??? ?_flushall(); ?? ??? ??? ??? ?sz2 = strlen(Number)+1; ?? ??? ??? ??? ?memcpy(p->IDcard, Number, sz2); ?? ??? ??? ??? ?printf("更改成功,返回主菜單"); ?? ??? ??? ??? ?printf("\n"); ?? ??? ??? ??? ?return; ?? ??? ??? ?default: ?? ??? ??? ??? ?printf("輸入有誤,返回主菜單\n"); ?? ??? ??? ??? ?return; ?? ??? ??? ?} ?? ??? ?} ?? ??? ?p = p->next; ?? ?} ?? ?if(p == NULL) ?? ?{ ?? ?printf("輸入有誤,返回主菜單"); ?? ?printf("\n"); ?? ?} ?? ?fclose(fp); } void PickUpCycle(CycleList* myBycycleList)//取車 { ?? ?int Year; ?? ?int Month; ?? ?int Day; ?? ?int Hour; ?? ?int FEE; ?? ?CycleNode*p = SearchCycle1(myBycycleList); ?? ?CycleNode* q = p->next; ?? ?assert(p != NULL); ?? ?printf("請輸入取車(年,月,日,時)"); ?? ?scanf("%d,%d,%d,%d", &Year, &Month, &Day, &Hour); ?? ?printf("您存車的時間是 %d年 %d月 %d日 %d時", (*p).partingTime.year, (*p).partingTime.month, (*p).partingTime.day, (*p).partingTime.hour); ?? ?FEE = (((Year - (*p).partingTime.year) * 365 * 24 + (Month - (*p).partingTime.month) * 30 + (Day - (*p).partingTime.day) * 24 + (Hour - (*p).partingTime.hour)))*2; ?? ?printf("您需要繳納的費(fèi)用為%d\n\n", FEE); ?? ?DeleteCyNode(myBycycleList, p->number); ?? ?printf("取車成功,返回主菜單\n"); ?? ?printf("\n"); } CycleNode* SearchCycle1(CycleList* myBycycleList) { ?? ?int num; ?? ?printf("請輸入要查詢自行車位號:\n"); ?? ?scanf("%d", &num); ?? ?CycleNode* p = myBycycleList->first; ?? ?while (p != NULL) ?? ?{ ?? ??? ?if (p->number == num) ?? ??? ?{ ?? ??? ??? ?return p; ?? ??? ?} ?? ??? ?p = p->next; ?? ?} ?? ?return NULL; } void PrintResSpace(CycleList* myBycycleList) { ?? ?printf("=============查詢剩余車位===================\n"); ?? ?CycleNode* p = myBycycleList->first->next; ?? ?assert(p != NULL); ?? ?while (p != NULL) ?? ?{ ?? ??? ?printf("當(dāng)前使用中的車位號是 %d\n", p->number); ?? ??? ?p = p->next; ?? ?} ?? ?printf("剩余車位數(shù)為: %zu \n",Space - myBycycleList->space); ?? ?printf("=============================================\n"); } void FileWrite(CycleList* myBycycleList) { ?? ?FILE *fp = fopen("Test.txt", "w"); ?? ?CycleNode *p = myBycycleList->first; ?? ?assert(p != NULL); ?? ?while (p != NULL) ?? ?{ ?? ??? ?fprintf("%s %d %d %s %d %d %d %d %d ",p->CycleHoster, p->Age,p->Sex,p->IDcard,p->number,p->partingTime.year,p->partingTime.month,p->partingTime.day, p->partingTime.hour); ?? ??? ?p = p->next; ?? ?} ?? ?fclose(fp); } void DeleteCyNode(CycleList* myBycycleList, int key) { ?? ?CycleNode *s;//q ?? ?CycleNode *t = myBycycleList->first;//p ?? ?while (t->next != NULL && t->next->number != key) ?? ??? ?t = t->next; ?? ?if (t->next == NULL) ?? ??? ?return; ?? ?s = t->next; ?? ?if (t->next == myBycycleList->last) ?? ??? ?myBycycleList->last = t; ?? ?t->next = s->next; ?? ?free(t); ?? ?myBycycleList->space--; ?? ?return; }
實(shí)際上用C寫出來的這種系統(tǒng)只能說是應(yīng)付學(xué)校檢測,實(shí)際上沒有人愿意用這種系統(tǒng),操作性不好,界面不美觀,魯棒性也不好,但是C真的是基礎(chǔ)編程學(xué)科,掌握這些方法的底層實(shí)現(xiàn)有助于很多其他編程語言的學(xué)習(xí),所以,底層的方法我們還是要學(xué)一學(xué)。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語言內(nèi)嵌匯編API內(nèi)存搜索引擎實(shí)例
這篇文章主要介紹了C語言內(nèi)嵌匯編API內(nèi)存搜索引擎實(shí)例,涉及匯編語言與內(nèi)存相關(guān)操作,需要的朋友可以參考下2014-10-10OpenCV獲取圖像中直線上的數(shù)據(jù)具體流程
對圖像進(jìn)行處理時,經(jīng)常會有這類需求:客戶想要提取出圖像中某條直線或者ROI區(qū)域內(nèi)的感興趣數(shù)據(jù),進(jìn)行重點(diǎn)關(guān)注,怎么操作呢,下面小編通過實(shí)例代碼介紹下OpenCV獲取圖像中直線上的數(shù)據(jù),一起看看吧2021-11-11數(shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組翻轉(zhuǎn)的實(shí)現(xiàn)方法
這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組翻轉(zhuǎn)的實(shí)現(xiàn)方法的相關(guān)資料,這里用幾種實(shí)現(xiàn)方法來實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-10-10