<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在大家學完C語言後,經常會被學校要求做很多管理系統,主流做法當選連結串列,但是很多問題就來了,在學習階段寫過最多基本上就是50行程式碼左右了,一下子做個小型管理系統問題就比較多。小編當然也是在學完初階C語言之後過了半年才完整做出來。
所以分享一下經驗。
1:首先資料結構:連結串列要會,而且要熟練掌握其增刪查改;
2:偵錯程式碼要會,很多程式碼一行一行的看到最後真的是很讓人頭大;
不會偵錯和監控變數是個很痛苦的過程,就算寫出來bug多到炸也是很繁瑣的;
3:最關鍵的就是這個框架問題了,如果框架不好,這個程式碼量會數倍上升,最後就是很多重疊的語句,很不美觀,並且程式碼質量不是很好,在寫系統之前一定要多看點小型管理系統的程式碼,主要是學習框架如何建立,然後再根據自己的系統情況進行改進。
首先我們來看標頭檔案,先將能夠用到的標頭檔案一一羅列出來建立在
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>
將定義宏等包含進去。
其次就是這個框架了
#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("自行車管理系統已經退出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; }
再看各個功能的實現
為了避免函數程式碼在一個檔案裡面十分的繁瑣,可以先建立一個.h檔案將函數名和節點定義放進去,看程式碼。
#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);//登記自行車函數 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);
最後就是程式碼函數功能的實現了。
#include"system.h" void menu() { system("color 4"); printf(" *********************************************************************** n"); printf(" ************************歡迎使用自行車存放管理系統******************************* n"); printf("| 自行車停車收費標準2元一小時 |n"); printf("|t1.--登記自行車停放位資訊 |n"); printf("|t2.--查詢自行車停車位資訊 |n"); printf("|t3.--修改自行車資訊 |n"); printf("|t4.--使用者取車管理 |n"); printf("|t5.--顯示當前空餘自行車位資訊 |n"); printf("|t0.--退出自行車管理系統 |n"); printf("| |n"); printf("|*******************************************************************************|n"); printf("|********************>>>>楊天喆-計科(02)班-20190101134<<<<********************|n"); printf("|*******************************************************************************|nn"); } 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 %dn", name,age,sex,IDcard,hour,Number,year,month,day,hour); fclose(fp); printf("登記成功n"); printf("n"); } else { printf("自行車位已滿,不能繼續停車"); } } 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("車主姓名:%sn", p->CycleHoster); (p)->Sex == 0 ? printf("男") : printf("女"); printf("車主年齡 %dn", 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("您需要繳納的費用為%dnn", 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("當前使用中的車位號是 %dn", p->number); p = p->next; } printf("剩餘車位數為: %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; }
實際上用C寫出來的這種系統只能說是應付學校檢測,實際上沒有人願意用這種系統,操作性不好,介面不美觀,魯棒性也不好,但是C真的是基礎程式設計學科,掌握這些方法的底層實現有助於很多其他程式語言的學習,所以,底層的方法我們還是要學一學。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45