C语言设备管理系统
1 需求分析
1.1 系統功能簡述
設備管理系統包含各種設備的全部信息,每臺設備為一種記錄,包括設備編號,設備名稱,設備型號,設備廠家,設備購買日期等。能夠顯示和統計各種設備信息。
1.2 需求規格
1.2.1 功能需求
系統功能列表如表1.1所示。
表1.1 系統功能列表
| 功能編號 | 功能名稱 | 功能描述 |
| 1 | ?????系統登陸 | 根據驗證碼輸入用戶名和密碼 |
| 2 | 功能選擇 | 為用戶提供進行功能選擇的界面。功能選擇包括設備信息錄入、設備信息查詢、設備信息修改、設備信息刪除、維修記錄管理、設備信息管理系統制作人信息、推出 |
| 3 | 設備信息錄入 | 設備編號錄入、設備名稱錄入、設備型號錄入、設備廠家錄入、設備購買日期錄入 |
| 4 | 設備信息更改 | 設備編號更改、設備名稱更改、設備型號更改、設備廠家更改、設備購買日期更改 |
| 5 | 設備信息刪除 | 選擇編號進行設備信息刪除 |
| 6 | 設備查找 | 根據編號信息進行設備查找 |
| 7 | 維修記錄管理 | 進行維修操作的記錄或查找 |
| 8 | 顯示所有設備 | 顯示系統所錄入的所有設備信息 |
| 9 | 關于 | 顯示管理系統制作人的各種信息 |
| 10 | 退出 | 按任意鍵退出系統 |
2.2 總體設計
2.1.1 系統結構
說明系統模塊劃分情況。如圖。
2.1.2 處理流程
說明系統處理流程。如圖2.2所示。
圖2.2 系統處理流程圖
2.2 接口設計?
2.2.1 用戶接口
說明將向用戶提供的命令和它們的語法結構,以及軟件的回答信息,一般為用戶界面設計,可用圖表示。
1.用戶登錄界面如圖2.3所示
圖2.3 系統登錄界面
?2.?用戶登入界面如圖2.4所示
圖2.4 用戶登入界面
3.設備信息錄入如圖2.5所示
?圖2.5 設備信息錄入界面
4.設備信息更改如圖2.6所示
?圖2.6 設備信息更改界面
5.設備查找如圖2.7所示
?圖2.7 設備查找界面
6.維修記錄管理如圖2.8和2.9和3.0所示
圖2.8
圖2.9?維修記錄頁面
圖3.0?維修查找頁面
?7.設備顯示如圖3.1所示
圖3.2?所有設備信息顯示頁面
?8.相關信息
?9.信心刪除界面如圖3.4所示
圖3.4?信息刪除頁面
2.2.2 外部接口
說明本系統同外界的所有接口,包括軟件與硬件之間的接口、本系統與各支持軟件之間的接口關系。
在myfile.txt中建立或更改增加刪除信息。
2.2.3 內部接口
說明本系統之內的各個系統元素之間的接口的安排,如函數接口。如表2.1所示。
表2.1 內部接口
| 函數編號 | 函數定義 | 函數說明 |
| 1 | void RandomCode (char Rcode[]) | 隨機碼產生函數 |
| 2 | int LandedApp (char *password[], char Rcode[]) | 登陸函數 |
| 3 | void fprintE(Equipment *head)? | 輸出到文件 |
| 4 | void addEquipment(Equipment *head)? | 添加設備 |
| 5 | void deleteEquipment(Equipment *head,int num)? | 刪除設備信息 |
| 6 | void changeEquipment(Equipment *head,int num)? | 更新設備信息 |
| 7 | void findEquipment() | 設備信息查找 |
| 8 | Equipment* fscanE() | 讀取設備信息 |
| 9 | void repairEquipment() ??? | 維修信息管理 |
| 10 | void printList(Equipment *head)? | 輸出設備信息列表 |
| 11 | int checkNum(Equipment *head, int num) | 檢查設備信息 |
3.1 系統主控模塊設計
本模塊的主要功能是為用戶顯示選項功能。
具體算法如下:
puts ("\n成功登陸!\n\n");system("cls");Equipment *head = (Equipment*)malloc(sizeof(Equipment));head->next = NULL;int num = -1;while(num!=0){printf("\n\n\t◢█◣◢█◣\t~~~~~~~~歡迎進入實驗室設備管理系統!~~~~~~~\n");printf("\t██████\n");printf("\t◥████◤\n");printf("\t ◥██◤\n");printf("\t ◥◤\n");printf("\n\t\t~~~~~~~~~~請輸入您選擇的操作(0~7):~~~~~~~~~~~~~~\n");printf("\t\t1.設備信息錄入\t2.設備信息更改\t");printf("\t3.設備信息刪除\n\t\t4.設備查找\t5.維修記錄管理\t\t6.顯示所有設備\n\t\t7.關于\t\t0.退出\n");printf("\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");system("color E9"); Sleep(5000);3.2 用戶注冊模塊設計
本模塊的主要功能是:?讓用戶輸入用戶名以及密碼,并為了安全起見,需要輸入隨機碼進行驗證。若用戶名密碼以及隨機碼輸入正確,則進行下一步,若輸入錯誤三次之后自動退出程序。
具體算法如下:
void RandomCode (char Rcode[]) /*隨機碼產生函數*/ { int i; srand ((unsigned int)time(NULL)); for (i = 0; i < 3; ++i) Rcode[i] = rand()%10 + '0'; Rcode[i] = '\0'; } /*登陸函數,判斷信息是否匹配,若匹配返回bai1,否則返回0*/ int LandedApp (char *password[], char Rcode[]) { char name[10] = {0}; char pword[10] = {0}; char rcode[4] = {0}; printf ("用戶名 : "); gets (name); printf ("密碼 : "); gets (pword); printf ("隨機碼 : "); gets (rcode); if (strcmp (name, password[0]) != 0 || strcmp (pword, password[1]) != 0 || strcmp (rcode, Rcode) != 0) return 0; else return 1; } char * password[2] = {"admin", "admin123"}; //用戶名和密碼char rc[4] = {0}; //隨機碼int count = 3; //可輸入次數system("color E9"); puts("\t\t\t\t\t▼▼▼▼▼▼▼▼▼▼▼▼▼");puts ("\n\t\t\t\t\t請輸入用戶名,密碼和隨機碼:");while (count){RandomCode (rc);printf ("\t\t\t\t\t隨機碼 : %s\n\n", rc);puts("\t\t\t\t\t▲▲▲▲▲▲▲▲▲▲▲▲▲");if (LandedApp(password, rc) != 0)break;--count;if (count != 0)puts ("\n\t\t\t\t錯誤的用戶名或密碼或隨機碼,請重新輸入: ");}輸入隨機驗證碼進行驗證,若三次驗證失敗則退出系統
void RandomCode (char Rcode[]) ???/*隨機碼產生函數*/
int LandedApp (char *password[], char Rcode[])???//登錄函數
3.3 輸出模塊設計
本模塊的主要功能是:文件的輸入輸出,錄入設備各種信息
具體算法如下:
//輸出到文件 void addEquipment(Equipment *head){Equipment *tail = head;while(tail->next!=NULL) tail = tail->next;Equipment *newnode = (Equipment*)malloc(sizeof(Equipment));printf("請輸入設備編號:");scanf("%d",&newnode->num);if(checkNum(head,newnode->num)){printf("輸入編號已有,輸入失敗!\n");return;}printf("請輸入設備名稱:");scanf("%s",&newnode->name);printf("\n請輸入設備型號:");scanf("%s",&newnode->model);printf("\n請輸入設備廠家:");scanf("%s",&newnode->factory);printf("\n請輸入設備購買日期:");scanf("%s",&newnode->buy_date);tail->next = newnode;newnode->next = NULL;fprintE(head);printf("錄入成功!\n"); }3.4 輸入模塊設計
本模塊的主要功能是:設備信息的輸入
具體算法如下:
//輸入 void fprintE(Equipment *head){FILE *fp=fopen("data.txt","w");Equipment *current = head->next;while(current){fprintf(fp,"%d\n",current->num);fprintf(fp,"%s\n",current->name);fprintf(fp,"%s\n",current->model);fprintf(fp,"%s\n",current->factory);fprintf(fp,"%s\n",current->buy_date);current = current->next;}fclose(fp); }3.5 刪除模塊設計
本模塊的主要功能是:設備信息的確認和刪除,先確認查找的設備信息是否存在,若存在則根據需求進行信息刪除,若不存在則進行錯誤提示。
具體算法如下:
//刪除 void deleteEquipment(Equipment *head,int num){if(head->next==NULL){printf("沒有設備!請先錄入設備! \n");return;}Equipment *current = head;Equipment *current_next = current->next;while(current_next){if(current_next->num==num){current->next = current_next->next;printf("刪除成功! \n");fprintE(head);return;}current = current->next;current_next = current_next->next;}printf("刪除失敗,沒有找到設備編號! \n"); }3.6 更新模塊設計
本模塊的主要功能是:設備信息的更新,先進行設備信息的查找確認是否存在,若存在則修改曾經信息;若查找信息不存在則進行錯誤提示。
具體算法如下:
//更新 void changeEquipment(Equipment *head,int num){if(head->next==NULL){printf("沒有設備!請先錄入設備! \n");return;}Equipment *current = head->next;while(current && (current->num!=num)){current = current->next;}if(current!=NULL){printf("請輸入更新后的數據:");printf("\n請輸入設備編號:");scanf("%d",¤t->num);printf("\n請輸入設備名稱:");scanf("%s",¤t->name);printf("\n請輸入設備型號:");scanf("%s",¤t->model);printf("\n請輸入設備廠家:");scanf("%s",¤t->factory);printf("\n請輸入設備購買日期:");scanf("%s",¤t->buy_date);fprintE(head);}else{printf("操作失敗,沒有找到設備編號! \n");} }3.7 查找模塊設計
本模塊的主要功能是:設備信息的查找,輸入相關信息的編號進行設備信息全顯示。
具體算法如下:
//查找 void findEquipment(){Equipment *head = fscanE();if(head->next==NULL){printf("沒有設備!請先錄入設備! \n");return;}int num;printf("請輸入查找設備的編號:");scanf("%d",&num);while(head){if(head->num==num){printf("編號為%d的信息為:\n",num);printf("編號:%d\n",head->num);printf("名稱:%s\n",head->name);printf("型號:%s\n",head->model);printf("廠家:%s\n",head->factory);printf("生產日期:%s\n",head->buy_date);return;}head = head->next;}printf("查找失敗,沒有找到設備編號! \n");}3.8 文件讀取模塊設計
本模塊的主要功能是:從文件中讀取所儲存的設備信息。
具體算法如下:
//從文件讀取設備信息 Equipment* fscanE(){Equipment *head1 = (Equipment*)malloc(sizeof(Equipment));head1->next = NULL;Equipment *current = head1;FILE *fp = fopen("data.txt","r");while(!feof(fp)){Equipment *newnode = (Equipment*)malloc(sizeof(Equipment));fscanf(fp,"%d\n",&newnode->num);fscanf(fp,"%s\n",newnode->name);fscanf(fp,"%s\n",newnode->model);fscanf(fp,"%s\n",newnode->factory);fscanf(fp,"%s\n",newnode->buy_date);current->next = newnode;newnode->next = NULL;current = current->next;}fclose(fp);return head1; }3.9 信息全輸出模塊設計
本模塊的主要功能是:設備信息全輸出,先輸入編號進行查找,若存在此信息,則輸出全信息,若不存在,則進行錯誤提示。?
具體算法如下:
//輸出 void printList(Equipment *head){if(head->next==NULL){printf("沒有設備,請先錄入設備! ");return;}Equipment *current = head->next;printf("--☆-★--☆-★--☆-☆--★-☆--★-☆--★---☆-★--☆-★--☆-☆\n\n");printf(" 編號 名稱 型號 廠家 生產日期 \n");while(current){printf("\t%d\t%s\t%s\t%s\t%s\n",current->num,current->name,current->model,current->factory,current->buy_date);current = current->next;}printf("--☆-★--☆-★--☆-☆--★-☆--★-☆--★---☆-★--☆-★--☆-☆\n\n"); }設備管理系統正確地實現了所要求的功能:用戶界面友好;程序運行速度快,具有較高的可靠性;程序易讀,結構清晰,具有良好的可擴展性。
當然系統仍然存在一些不足之處:檢索功能不夠完善,整體界面不夠美觀,背景只有單調的顏色,沒有動畫效果這些都有待進一步地開放和實現。
通過本次項目實習,不僅鞏固和掌握了C語言的知識,數據結構的知識,結構化程序設計的思想,而且對軟件開發的過程有了一定的感性認識。
代碼我放進文件,需要可以自取
基于C語言的設備管理系統.zip-C/C++文檔類資源-CSDN下載
總結
- 上一篇: 机载激光雷达原理与应用科普(十一)
- 下一篇: 快速高斯模糊算法