客戶快遞信息管理系統——導入文件識別存儲

客戶快遞信息管理系統背景:

目前不少公司都提供網購服務,為了將商品快遞給客戶,就必須保存和管理客戶的姓名、電話號碼、郵寄地址等信息。為此,本項目要求完成一個小型客戶快遞信息管理系統,完成對客戶快遞信息的建立、顯示、查找、插入、刪除、修改等功能。作為一個完整的系統,應該具有良好的界面和較強的容錯能力。

實驗目的:

1.針對客戶快遞信息管理系統這一實際問題,學會依據軟件開發流程,進行需求分析,概要設計、模塊設計、詳細設計,完成代碼編寫與調式,進行測試分析,撰寫用戶手冊,從而得到軟件開發的綜合訓練。
2.學會依據實際問題選擇合適的數據結構存儲通訊信息,設計相應的算法實現客戶信息的建立、顯示、查找、插入、刪除、修改等操作。

關鍵

實現了導入文件到程序中,程序直接識別并存入系統當中。

/*0. 退出系統,釋放客戶信息的存儲空間;                        第一周 
1. 可輸入若干條客戶信息,并創建相應的存儲結構存放這些信息;    第一周 
2. 可顯示全部客戶信息;                                        第一周 
3. 可在存儲結構中插入一條客戶信息;                            第一周 
4. 可按姓名查詢并顯示該客戶信息;
5. 可按姓名刪除該客戶信息;
6. 可按姓名修改該客戶信息;
以上為基本要求,更高要求如下:
7. 將老師提供的“客戶信息.txt”復制到你的項目文件夾中,將該文件中的客戶信息.導入到你系統相應存儲結構中。*/ #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN sizeof(LNode) int seat;                              //全局變量,用于存放客戶信息成員的序號
typedef struct LNode {                      //客戶信息結點char name[20];                          //姓名double telenum;                         //電話char address[200];                      //郵寄地址struct LNode *next;
} LNode, *LinkList;//功能0:退出系統,釋放客戶信息的存儲空間
void dropLink(LinkList L) {LinkList cur = L->next;        //cur意味著當前節點,初始化指向鏈表頭節點,需要考慮是不是虛擬頭節點 LinkList temp;                 //temp做臨時節點while(cur !=NULL) {            //cur為空意味著刪除結束 temp = cur->next;          //且temp指向cur的下一個節點 free(cur);                 //釋放當前節點 cur = temp;                //將cur賦值為cur的下一個節點,實現遍歷效果 } L = NULL;                      //將鏈表頭指針置為NULL
}//功能1:可輸入若干條客戶信息,并創建相應的存儲結構存放這些信息
LinkList creatIncreLink(LinkList L) {//前插法(逆位序)創建一個存放客戶信息成員的單鏈表,返回頭結點地址double telenum;char name[20], address[200], temp;LinkList p;if (L == NULL) {L = (LinkList)malloc(LEN);  //頭結點L->next = NULL;}printf("請輸入姓名、電話號碼、郵寄地址,建立客戶信息\n若要結束,只需將姓名輸入'0'\n");printf("請輸入姓名: ");temp = getchar();gets(name);if (!strcmp(name, "0")) {//若要結束,只需將姓名輸入'0'free(L);  //釋放頭結點L = NULL;return (L);}printf("請輸入電話號碼:");scanf("%lf", &telenum);printf("請輸入郵寄地址: ");temp = getchar();gets(address);while (true) {p = (LinkList)malloc(LEN); //新結點strcpy(p->name, name);strcpy(p->address, address);p->telenum = telenum;//在L的頭部插入新結點p->next = L->next;L->next = p;printf("請輸入姓名: ");//temp = getchar();   //實驗表明這條語句不能要gets(name);if (!strcmp(name, "0")) return (L);//若要結束,只需將姓名輸入'0'printf("請輸入電話號碼:");scanf("%lf", &telenum);printf("請輸入郵寄地址: ");temp = getchar();  //實驗表明這條語句一定要gets(address);}
}//功能2:可顯示全部客戶信息
void printLink(LinkList L) {// 打印頭結點地址為L的客戶信息LinkList p = L;seat  = 1;printf("\n          -------------------------------------------\n");printf("               姓名         電話號碼     郵寄地址\n");printf("          --------------------------------------------\n");if (L == NULL || L->next == NULL)printf("該客戶信息中沒有元素\n");elsewhile (p->next != NULL) {printf("          %2d   %-8s", seat, p->next->name);printf("    %.0f  %-19s\n", p->next->telenum, p->next->address);p = p->next;seat++;}printf("          --------------------------------------------\n");return ;
}//功能3:可在存儲結構中插入一條客戶信息
void insertLink(LinkList L) {double telenum;                   //存儲客戶的電話號碼 char name[20], address[200], temp;   //存儲客戶的姓名和寄件地址,temp來做緩存 LinkList p = (LinkList)malloc(LEN);  //創建節點來存儲客戶信息 printf("現在開始插入客戶的信息,\n請輸入姓名:"); temp = getchar();gets(name);printf("請輸入電話號碼:");scanf("%lf", &telenum);printf("請輸入郵寄地址:");temp = getchar();gets(address);strcpy(p->name, name);        //將輸入的name存入節點的name域 p->telenum = telenum;         //將輸入的telenum存入節點的telenum域  strcpy(p->address, address);  //將輸入的address存入節點的address域 p->next = L->next;            //將p節點的指針域指向頭節點L的下一節點 L->next = p;                  //將頭節點L的指針與指向p節點 printLink(L);
} //功能4:可按姓名查詢并顯示該客戶信息
void inquireLink(LinkList L) {LinkList cur = (LinkList)malloc(LEN);cur = L->next;LinkList temp = (LinkList)malloc(LEN);/*使用一個變量來記錄是否查詢到客戶,否是0,第一次查詢是1,后邊是2、3、...;也可以充當在表中全局變量seat的效果,記錄客戶次序*/int isExists = 0;            char name[20];printf("請輸入你要查詢信息的客戶姓名:");char tem = getchar();gets(name);while(cur != NULL) {                  //為空意味查詢不到 temp = cur->next;if(!strcmp(cur->name, name)){isExists++;if(isExists == 1) { //第一次查詢到需要打印出表頭 printf("查詢到客戶信息如下:\n"); printf("\n          -------------------------------------------\n");printf("               姓名         電話號碼     郵寄地址\n");printf("          --------------------------------------------\n");}printf("          %2d   %-8s", isExists, cur->name);printf("    %.0f  %-19s\n", cur->telenum, cur->address);}cur = temp; }printf("          --------------------------------------------\n"); //打印表尾 
} //功能5:可按姓名刪除該客戶信息 
void deleteLink(LinkList L) {LinkList cur = (LinkList)malloc(LEN);LinkList pre = (LinkList)malloc(LEN);pre = L;char name[20];int deleteClient = 0;                     //刪除用戶數目printf("請輸入你要刪除的客戶姓名:");    char tem = getchar();gets(name);while(pre->next != NULL) {                  //為空意味查詢不到要刪除的客戶 cur = pre->next;if(!strcmp(cur->name, name)){         //判定到刪除姓名與客戶姓名是否相同 deleteClient++;                   //若相同則積累刪除用戶+1 pre->next = cur->next; free(cur);}else pre = cur;} if(deleteClient) printf("刪除成功\n");    //刪除用戶數目不為零時證明有刪除,刪除成功 return;
}//功能6:可按姓名修改該客戶信息 
void modifyLink(LinkList L) {char name[20];printf("輸入你要修改的客戶姓名:");char tem = getchar();gets(name);printf("%s",name);LinkList cur = (LinkList)malloc(LEN);cur = L->next;bool isName, isTelenum, isAddress;  //定義三個信息變量來記錄是否要改變各自信息 while(cur != NULL) {if(!strcmp(cur->name, name)) {printf("是否要修改此用戶的姓名(是1|否0):"); scanf("%d", &isName);if(isName){printf("輸入修改后的姓名:");  tem = getchar(); gets(cur->name);printf("修改姓名成功\n");}printf("是否要修改此用戶的電話號碼(是1|否0):");scanf("%d", &isTelenum);if(isTelenum){printf("輸入修改后的電話號碼:"); scanf("%lf", &cur->telenum);printf("修改電話號碼成功\n"); }printf("是否要修改此用戶的郵寄地址:(是1|否0):");scanf("%d", &isAddress);if(isAddress) {printf("輸入修改后的郵寄地址:");tem = getchar();gets(cur->address);printf("修改郵寄地址成功\n");}}cur = cur->next;} 
} //功能7: 將老師提供的“客戶信息.txt”復制到你的項目文件夾中,將該文件中的客戶信息.導入到你系統相應存儲結構中。
LinkList inputLink(LinkList& L) {if(L == NULL){L = (LinkList)malloc(LEN);}//初始化,導入文件 FILE *file = fopen("客戶信息.txt", "r+");if (file == NULL) {perror("Error opening file");return NULL;}char buffer[256];char name[20], itelenum[20], address[200];double telenum;//將信息存入一個個的客戶信息節點 while(fgets(buffer, sizeof(buffer), file) != NULL) {//通過lable指針來指向buffer的初始地址,使用strtok函數來切割得到信息 char* lable;           lable = buffer;seat++;//創建鏈表節點LinkList cur = (LinkList)malloc(LEN);//將信息中的姓名、電話號碼、寄件地址整理好存入創建的鏈表節點//提取姓名 //從butter初始地址開始,截到第一個>符號 char *token = strtok(lable, ">");strcpy(name, token);lable += strlen(token)+1; //strlen(token)得到姓名的長度,加一跳過>符號 //提取電話號碼//從姓名>后開始,截到第二個>符號 token = strtok(lable, ">");strcpy(itelenum,token);//itelenum[i] = '\0';telenum = atof(itelenum); // 轉換為 double//提取寄件地址//strlen(token)得到電話的長度,加一跳過>符號lable += strlen(token)+1;//將剩下的字符賦給地址 strcpy(address, lable);//將信息中的姓名、電話號碼、寄件地址整理好存入創建的鏈表節點strcpy(cur->name, name);        //將輸入的name存入節點的name域 cur->telenum = telenum;         //將輸入的telenum存入節點的telenum域  strcpy(cur->address, address);  //將輸入的address存入節點的address域 //將節點插入到鏈表中cur->next = L->next;            //將p節點的指針域指向頭節點L的下一節點 L->next = cur;                  //將頭節點L的指針與指向p節點 }printf("導入成功");fclose(file);return L;
}int main() {LinkList L = NULL, p;int menu, count = 0; //count專門用于控制菜單顯示,不要做其他用途char temp;bool succeed = 0;   //succeed標志操作是否成功,1成功,0失敗char name[20];    //姓名double telenum;   //電話char address[200];   //郵寄地址//system("color 1f");while (true) {if (count % 5 == 0) {printf("\n           ********* ^@^歡迎使用客戶快遞信息管理系統*********\n");printf("           *               1 創建客戶信息                   *\n");printf("           *               2 插入客戶信息                   *\n");printf("           *               3 查詢客戶信息                   *\n");printf("           *               4 刪除客戶信息                   *\n");printf("           *               5 顯示客戶信息                   *\n");printf("           *               6 修改客戶信息                   *\n");printf("           *               7 修改客戶信息                   *\n");printf("           *               0 退出管理系統                   *\n");printf("           ********* ^@^歡迎使用客戶快遞信息管理系統*********\n");printf("請選擇0-6:");}count++;scanf("%d", &menu);switch (menu) {case 1: {L = creatIncreLink(L);printf("建立客戶信息:");printLink(L);if (seat > 9) count = 0; //顯示菜單break;}case 2: {insertLink(L);break;}//endcase2case 3: {inquireLink(L);break;}//endcase3case 4: {deleteLink(L);break;}//endcase4case 5: {if (L != NULL) { //客戶信息表L已創建printf("當前客戶信息內容如下:\n");printLink(L);if (seat > 9) count = 0; //顯示菜單}//endifelse printf("ERROR: 客戶信息還沒有建立,請先建立客戶信息\n");break;}//endcase5case 6: {modifyLink(L);break;}//endcase6case 7: {inputLink(L);break;}case 0: {if(seat == 0) return 0;        //當用戶為零時直接退出系統 else dropLink(L);                   //用戶不為零清除內存再退出系統 printf("退出系統");return 0;} default:printf("沒有此功能,重新輸入\n");}//endswitchprintf("請選擇0-6:");}//endwhilereturn 1;
}//endmain1

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/717493.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717493.shtml
英文地址,請注明出處:http://en.pswp.cn/news/717493.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++構造函數析構函數

構造和析構函數用于管理對象的初始化和清理工作&#xff0c;確保對象的正確生命周期管理。以下是其重要特性&#xff1a; 構造函數不能是虛函數 從存儲空間角度&#xff1a; 虛函數是需要通過虛函數表和虛指針來調用的&#xff0c;如果用虛函數實現構造函數&#xff0c;而對象…

【算法沉淀】刷題筆記:并查集 帶權并查集+實戰講解

&#x1f389;&#x1f389;歡迎光臨&#x1f389;&#x1f389; &#x1f3c5;我是蘇澤&#xff0c;一位對技術充滿熱情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特別推薦給大家我的最新專欄《數據結構與算法&#xff1a;初學者入門指南》&#x1f4d8;&am…

Day13:信息打點-JS架構框架識別泄漏提取API接口枚舉FUZZ爬蟲插件項目

目錄 JS前端架構-識別&分析 JS前端架構-開發框架分析 前端架構-半自動Burp分析 前端架構-自動化項目分析 思維導圖 章節知識點 Web&#xff1a;語言/CMS/中間件/數據庫/系統/WAF等 系統&#xff1a;操作系統/端口服務/網絡環境/防火墻等 應用&#xff1a;APP對象/API接…

QML學習之Text

文本顯示是界面開發中的重要內容&#xff0c;在Qt Quick模塊中提供了 Text 項來進行文本的顯示&#xff0c;其中可以使用 font 屬性組對文本字體進行設置&#xff1a; font.bold&#xff1a;是否加粗&#xff0c;取值為true或false font.capitalization&#xff1a;大寫策略&a…

01.20 校招 實習 內推 面經

綠*泡*泡VX&#xff1a; neituijunsir 交流*裙 &#xff0c;內推/實習/校招匯總表格 1、校招 | 中興微電子2024屆校園招聘 校招 | 中興微電子2024屆校園招聘 2、長城汽車2024大學生開放日上大分&#xff01; 長城汽車2024大學生開放日上大分&#xff01; 3、校招 | 江淮汽…

java程序員的金三銀四求職寶典(二)

程序員的金三銀四求職寶典 隨著春天的腳步漸近&#xff0c;對于許多程序員來說&#xff0c;一年中最繁忙、最重要的面試季節也隨之而來。金三銀四&#xff0c;即三月和四月&#xff0c;被廣大程序員視為求職的黃金時期。在這兩個月里&#xff0c;各大公司紛紛開放招聘&#xf…

倒計時36天

C-小紅關雞_牛客周賽 Round 35 (nowcoder.com) //超時 134.17/175 主要是循環這部分的問題 #include <bits/stdc.h> using namespace std; #define int long long const int N 2e5 6; const int inf 0x3f3f3f3f; int a[N]; void solve() {int n,k;cin>>n>…

多模態大語言模型的ai反饋增強機器人操作研究

本研究關注于利用大語言模型&#xff08;LLMs&#xff09;提供的自動化偏好反饋來增強決策過程 ○ 提出了一種多模態LLM&#xff0c;稱為CriticGPT&#xff0c;可以理解機器人操作任務中的軌跡視頻&#xff0c;并提供分析和偏好反饋 ○ 從獎勵建模的角度驗證了CriticGPT生成的…

使用 MongoDB Atlas 無服務器實例更高效地開發應用程序

使用 MongoDB Atlas無服務器實例更高效地開發應用程序 身為開發者&#xff0c;數據庫并不一定需要您來操心。您可不想耗費時間來預配置集群或調整集群大小。同樣地&#xff0c;您也不想操心因未能正確擴展而導致經費超標。 MongoDB Atlas 可為您提供多個數據庫部署選項。雖然…

【javascript】快速入門javascript

本文前言及說明 適合學過一門語言有一定基礎的人看。 省略最初學習編程時的各種編程重復的基礎知識。 javascript簡介 編程語言&#xff08;主前端&#xff09; 用途&#xff1a;主web前后端&#xff0c;游戲&#xff0c;干別人網站 優點&#xff1a;速度快&#xff0c;瀏…

一文掃盲:室內導航系統的應用場景和技術實現(入門級)

hello&#xff0c;我是貝格前端工場&#xff0c;之間搞過一些室內導航項目&#xff0c;有2D也有3D的&#xff0c;算是有些經驗&#xff0c;這里給大家分享一下室內導航的基本嘗試&#xff0c;歡迎老鐵們點贊、關注&#xff0c;如有需求可以私信我們。 一、室內導航是什么 室內…

Vue開發實例(十)Tabs標簽頁打開、關閉與路由之間的關系

創建標簽頁 一、創建標簽頁二、點擊菜單展示新標簽頁1、將標簽數據作為全局使用2、菜單點擊增加標簽頁3、處理重復標簽4、關閉標簽頁 三、點擊標簽頁操作問題1&#xff1a;點擊標簽頁選中菜單進行高亮展示問題2&#xff1a;點擊標簽頁路由也要跳轉 四、解決bug 先展示最終效果 …

Android 基礎入門 基礎簡介

1. 觀察App運行日志 2.Android 開發設計的編程語言 koltin Java c c 3.工程目錄結構 4.Gradle 5.build.gradle 文件解析 plugins {id("com.android.application")//用了哪些插件 主配置文件版本控制 所以這里不用寫版本 }android {namespace "com.tiger.myap…

【C++】每周一題——2024.3.3(手滑再寫一篇)

題目 Cpp 【問題描述】 輸入一個由若干個以空格分隔的單詞組成的英文文章&#xff0c;求文章中最短的單詞&#xff08;文章以英文句點”.”結束&#xff0c;且字符數不超過200&#xff09;. 【輸入格式】 一行&#xff0c;表示輸入的英文文章。 【輸出格式】 一行&#xff0c;表…

反向代理與負載均衡

目錄 反向代理 負載均衡 反向代理 代理角色&#xff1a; 正常情況下&#xff0c;客戶端&#xff08;如瀏覽器&#xff09;直接與服務器通信&#xff0c;但在反向代理中&#xff0c;Nginx充當客戶端和服務器之間的中介。客戶端向Nginx發送請求&#xff0c;而Nginx負責將請求轉…

基于springboot+vue的二手車交易系統

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…

金三銀四,風控建模面試全攻略:從簡歷準備到面試技巧

隨著春天的到來,招聘市場的 “金三銀四” 也悄然而至。公眾號的小伙伴問我有沒有面試相關指導課程,上完課后,把整理的部分材料通過文章分享給更多有需要的朋友。預祝大家順利獲得心儀的職位。本文將從簡歷準備、面試注意事項以及高頻面試問題三個方面,為你提供一份全面的風…

字符串判空錯誤

字符串判空錯誤 前端傳來的請求數據&#xff0c;若用只用String為null判斷&#xff0c;則忽略了str“”的情況&#xff0c;此時str不空&#xff0c;但str.length()0 RequestMapping(path "/add", method RequestMethod.POST)ResponseBodypublic String addDiscuss…

C++進階(二) 多態

一、多態的概念 多態的概念&#xff1a;通俗來說&#xff0c;就是多種形態&#xff0c; 具體點就是去完成某個行為&#xff0c;當不同的對象去完成時會 產生出不同的狀態。舉個栗子&#xff1a;比如買票這個行為&#xff0c;當普通人買票時&#xff0c;是全價買票&#xff1b;學…

Linux 查詢端口被占用命令

Linux 查詢端口被占用命令 1、lsof -i:端口號 用于查看某一端口的占用情況&#xff0c;比如查看8000端口使用情況&#xff0c;lsof -i:8000 lsof -i:8080&#xff1a;查看8080端口占用 lsof abc.txt&#xff1a;顯示開啟文件abc.txt的進程 lsof -c abc&#xff1a;顯示abc進…