C語言 項目 CRM系統(客戶信息管理系統)

項目目標

在這里插入圖片描述
在這里插入圖片描述

項目需求說明

在這里插入圖片描述

系統界面

1)添加客戶界面
通過編號來區分客戶
在這里插入圖片描述
2)刪除客戶界面
對用戶輸入的編號進行核查,存在與否,合法與否
在這里插入圖片描述
3)顯示客戶列表界面
在這里插入圖片描述
4)修改客戶信息的界面
在這里插入圖片描述

項目設計

Customer結構體的設計
在這里插入圖片描述
CRM系統結構框架圖
在這里插入圖片描述
在這里插入圖片描述

案例代碼

#include <stdio.h>
#include <string.h>struct Customer {int id;int age;char name[10];char gender;char  phone[10];char  email[10];
};
char key ;
char loop;
int customerNum;//客戶結構體數組
struct Customer customers[20];//得到一個客戶的信息
void getInfo(struct Customer *customer) {/*sprintf(info, "\n%d\t%s\t%c\t%d\t%s\t%s", (*customer).id, (*customer).name, (*customer).gender, (*customer).age, (*customer).phone,(*customer).email);*/printf("\n%d\t%s\t%c\t%d\t%s\t%s", (*customer).id, (*customer).name, (*customer).gender, (*customer).age, (*customer).phone,(*customer).email);
}//提供各種操作//1. 添加
void add(){//編號自動增長customers[customerNum].id = customerNum + 1;printf("\n---------------------添加客戶---------------------");printf("\n姓名:");scanf("%s", customers[customerNum].name);getchar();printf("\n性別:");scanf("%c", &(customers[customerNum].gender));getchar();printf("\n年齡:");scanf("%d", &(customers[customerNum].age));getchar();printf("\n電話:");scanf("%s", customers[customerNum].phone);getchar();printf("\n郵箱:");scanf("%s",customers[customerNum].email);getchar();printf("\n---------------------添加完成---------------------");customerNum++;}//根據輸入的id去找對應的下標,如果找不到返回-1
int findIndex(int id){int index = -1;int i;for (i = 0; i < customerNum ; i++) {if (customers[i].id == id) {index = i;break;}}return index;
}//2. 刪除客戶
int del(int id){//找到id對應的元素下標int index = findIndex(id);int i;if (index == -1) {return 0;//說明這個客戶不存在..}else {//找到,就從index+1開始整體前移for (i = index + 1; i < customerNum; i++) {customers[i - 1] = customers[i];}--customerNum;return 1;}
}//顯示部分//1. 顯示所有
void showList(){int i = 0;printf("\n---------------------------客戶列表---------------------------");printf("\n編號\t姓名\t性別\t年齡\t電話\t郵箱");for (i = 0; i < customerNum; i++) {getInfo(&customers[i]);}
}//2. 完成刪除 界面
//---------------------刪除客戶---------------------
//請選擇待刪除客戶編號(-1退出):1
//確認是否刪除(Y/N):y
//---------------------刪除完成---------------------void delView(){int id;char choice = ' ';printf("\n---------------------刪除客戶---------------------");printf("\n請選擇待刪除客戶編號(-1退出):");scanf("%d", &id);getchar();if (id == -1) {printf("\n---------------------刪除沒有完成---------------------");return;}printf("確認是否刪除(Y/N):");scanf("%c", &choice);getchar();if (choice == 'Y') {if(del(id)){printf("\n---------------------刪除完成---------------------");}else{printf("\n---------------------刪除沒有完成,無此id---------------------");}} 
}//3. 主菜單
void mainMenu() {do {printf("\n-----------------客戶信息管理軟件-----------------");printf("\n                 1 添 加 客 戶");printf("\n                 2 修 改 客 戶");printf("\n                 3 刪 除 客 戶");printf("\n                 4 客 戶 列 表");printf("\n                 5 退          出");printf("\n請選擇(1-5):");scanf("%c", &key);getchar();switch (key) {case '1':add();break;case '2':break;case '3':delView();break;case '4':showList();break;case '5':loop = 0;break;default:printf("\n輸入錯誤,請重新輸入");break;}} while (loop);printf("\n你已經成功的退出了系統....");getchar();
}void main() {為了測試方便customers[0].id = 1;customers[0].age = 10;strcpy(customers[0].email , "xx@sohu.com");customers[0].gender = 'f';strcpy(customers[0].name , "zs");strcpy(customers[0].phone , "110");mainMenu();return ;
}

自己完成的代碼

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//項目-CRM系統(客戶信息管理系統)-DQ版本1
const int size=100;//結構體數組大小
//客戶結構體
struct Customer{int id;//編號char name[10];//姓名char sex[2];//性別int age;//年齡char phone[20];//電話char email[30];//郵箱
}cs[size];
//全局變量
//記住:結構體數組的下標從0開始,而客戶編號從1開始
int loop=1;//判斷菜單是否循環
char num='0';//用戶選擇的功能數字
int d=0;//用戶選擇要刪除的客戶編號
char c='c';//用戶選擇確認是否要刪除的操作
int count=0;//現在存有的客戶數量
char m='c';//用戶選擇是否要退出系統的操作
//添加客戶
void add()
{printf("-----------添加客戶-----------\n");//使用結構體數組去存儲信息cs[count]printf("姓名:");scanf("%s",cs[count].name);getchar();printf("性別:");scanf("%s",cs[count].sex);getchar();printf("年齡:");scanf("%d",&cs[count].age);getchar();printf("電話:");scanf("%s",cs[count].phone);getchar();printf("郵箱:");scanf("%s",cs[count].email);getchar();cs[count].id=count+1;//客戶編號從1開始count++;printf("-----------添加完成-----------\n");
}
//返回對應編號所對應的數組下標
int findindex(int id)
{int i;for(i=0;i<count;i++){if(id==cs[i].id){return i;//已找到id,對應的下標為i}}return -1;//沒有找到id
}
//顯示要修改的客戶界面
void showUpdate(int index)
{	printf("姓名(%s):",cs[index].name);scanf("%s",cs[index].name);getchar();printf("性別(%s):",cs[index].sex);scanf("%s",cs[index].sex);getchar();printf("年齡(%d):",cs[index].age);scanf("%d",&cs[index].age);getchar();printf("電話(%s):",cs[index].phone);scanf("%s",cs[index].phone);getchar();printf("郵箱(%s):",cs[index].email);scanf("%s",cs[index].email);getchar();}
//修改客戶
void update()
{int id=0;printf("-----------修改客戶-----------\n");printf("請輸入要修改的客戶的編號:");scanf("%d",&id);getchar();int index=findindex(id);if(index!=-1)//找到下標{showUpdate(index);printf("-----------修改完成-----------\n");}else{printf("沒有此編號的客戶!\n");}}
//在刪除之后重新排列結構體數組
void rearr(int d)
{int i;if(d<count){for(i=d;i<count;i++){cs[i]=cs[i+1];//如:把cs[1]的內容復制給cs[0]//修改編號cs[i].id-=1;//移動過來的數組的編號-1}}count--;//客戶數量-1
}
//刪除客戶
void del(struct Customer*cs)
{printf("-----------刪除客戶-----------\n");printf("請選擇要刪除的客戶編號:");scanf("%d",&d);getchar();//enterif(d>count){printf("該編號的客戶不存在!\n");}else{printf("確認是否刪除(y/n):");scanf("%c",&c);if(c=='y'){rearr(d-1);//重新排列結構體}else if(c=='n'){printf("取消刪除!\n");}else{printf("輸入內容錯誤!\n");}getchar();}printf("-----------刪除完成-----------\n");
}
//客戶列表
void show(struct Customer*cs)
{printf("-----------客戶列表-----------\n");printf("編號\t姓名\t性別\t年齡\t電話\t郵箱\n");int i;for(i=0;i<count;i++){printf("%d\t%s\t%s\t%d\t%s\t%s\n",(*cs).id,(*cs).name,(*cs).sex,(*cs).age,(*cs).phone,(*cs).email);cs++;}printf("----------客戶列表完成--------\n");
}
//顯示查找的客戶信息
void showSeek(int index)
{printf("編號\t姓名\t性別\t年齡\t電話\t郵箱\n");	printf("%d\t%s\t%s\t%d\t%s\t%s\n",cs[index].id,cs[index].name,cs[index].sex,cs[index].age,cs[index].phone,cs[index].email);
}
//查找客戶
void seek()
{int id=0;printf("-----------查找客戶-----------\n");printf("請輸入要查找的客戶的編號:");scanf("%d",&id);getchar();int index=findindex(id);if(index!=-1)//找到下標{showSeek(index);printf("-----------查找完成-----------\n");}else{printf("沒有此編號的客戶!\n");}
}
//退出
void esc()
{//do-while另外一種寫法/*do{printf("請確認是否要退出(y/n):");scanf("%c",&m);getchar();}while(m!='y'&&m!='n');//輸入的內容既不是y也不是n*/do{printf("請確認是否要退出(y/n):");scanf("%c",&m);getchar();if(m=='y'||m=='n'){break;//退出此do-while循環}else{printf("輸入的內容錯誤!\n");}}while(1);if(m=='y'){loop=0;//退出系統}
}
//顯示菜單
void menu(struct Customer*cs)
{do{printf("-------客戶信息管理軟件-------\n");printf("---------1.添加客戶-----------\n---------2.修改客戶-----------\n---------3.刪除客戶-----------\n---------4.客戶列表-----------\n---------5.查找客戶-----------\n---------6.退出---------------\n");printf("         請選擇(1-6):");scanf("%c",&num);getchar();//enterswitch(num){case '1'://添加客戶add();break;case '2'://修改客戶update();break;case '3'://刪除客戶del(cs);break;case '4'://客戶列表show(cs);break;case '5'://查找客戶seek();break;case '6'://退出esc();break;default://用戶輸入其他內容時printf("輸入的內容錯誤!");break;}}while(loop);printf("已退出CRM系統!\n");
}int main()
{//初始化局部變量memset(cs,0,sizeof(cs));//cs是數組,直接傳遞首地址即可menu(cs);getchar();return 0;
}

完成代碼遇到的知識點

C語言在void函數中使用return
如:

void add()
{return;
}

return表示中止當前函數的運行,并將操作權返回給調用者。
如果是在main函數中,表示將操作權返回給操作系統,return不是必須要返回一個值。

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

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

相關文章

代碼重構 防火墻 相關知識

參考 依據Linux命令以及sysconf下現有的iptables命令&#xff0c;詳見hsm_sysconf_server/src/sysconf_server.cpp中的firewall規則。 接口名稱 firewall_manager 目的(現實) 根據網口直連獲取當前eth0和eth1的各種信息保證設置的正確性 以及要針對管理口和服務口設計不…

C語言 文件的基本介紹

基本介紹 輸入流與輸出流 重點在C程序(內存)的數據移動方向 對于C程序(內存) 輸入數據:輸入流 輸出數據:輸出流 輸入 和輸出 C標準庫 標準輸入輸出庫 標準文件 getchar()&putchar()函數 代碼 #include<stdio.h> #include<stdlib.h> //文件--getchar()和…

ubuntu修改字體 樣式

使用 快捷鍵 ctrlaltt 打開終端安裝gnome-tweaks桌面管理工具 sudo apt install gnome-tweaksaltf2 在運行窗口輸入 gnome-tweaks 命令&#xff0c;然后回車打開優化窗口&#xff0c;選擇第二個front字體選項ubuntu顯示中文

C語言 文件的讀寫

引入 OS操作系統 打開文件fopen()函數 讀寫模式: r:讀取已有文件 w:文件不存在,創建文件并寫入文件.文件存在,內容清零,再寫入文件 a: 文件不存在,創建文件并寫入文件.文件存在,以追加的形式寫入文件 r:讀寫已有文件 w:文件不存在,創建文件并讀寫文件.文件存在,內容清零,再…

StarWind V2V Image Converter:虛擬機鏡像轉換工具,可將 IMG 文件轉換為 VMware VMDK 文件

操作流程 選擇本地的需要轉換的文件找到源文件的路徑&#xff0c;img格式選擇轉化后的格式 第一個選擇 第二個 速度快一些選擇將轉化后的文件的存儲路徑軟件的下載鏈接 鏈接: https://pan.baidu.com/s/1Fe6yI42Zz9d_Q7aUhGe1FQ 提取碼: 5vmv

數學建模基礎知識

原型與模型 模型的分類 數學建模 數學建模的分類 成為建模大神 數學建模比賽 數學建模一般步驟 數學建模全過程 數學建模論文寫作 1&#xff09;摘要:是決定最后獲獎等級的關鍵 2&#xff09;問題重述:使用自己的語言將問題重述一次 3&#xff09;符號說明:對于常見的或…

數學建模 線性規劃模型基本原理

線性規劃問題 例1.1 可行解&可行域 matlab標準形式及軟件求解 標準形式: C稱為價值向量 如果是求max,加一個負號-c^T 如果是求Ax>b,加一個負號-Ax<b 使用matlab求線性規劃例題 求解的是最大值:加上負號 y是求解的最優解 zeros()使用: zeros(n)&#xff1a;生…

接上文 ,解決 虛擬機VM,U盤(磁盤)裝有系統,將其中系統安裝到另外一塊磁盤的具體操作

問題原因&#xff1a;接上文&#xff0c;將生成的vsdk格式的磁盤導入VM創建鏡像&#xff0c;相關于U盤裝載系統鏡像&#xff0c;將U盤其中的鏡像導入到磁盤里邊&#xff0c;U盤是引導&#xff0c;會將系統最終裝載到磁盤出錯原因是因為 沒有新建第二塊磁盤 解決 新增一塊磁盤如…

數學建模 層次分析法

簡介 針對多目標,多準則或無結構特性的復雜決策問題 步驟 解決評價類問題 評價類問題: 資料查找: 1)查找相關文獻 2)如果沒有找到相關文獻 3)搜索 通過上述步驟后得到的結果 構建層次結構模型 舉例: 成對比較矩陣 標度表: 奇數:越大越重要 偶數:上述兩相鄰判斷的中值…

ubuntu配置靜態IP地址

sysconf_client update -t network -j {"netdev":"eth0","ip":"a.b.c.d","mask":"255.255.255.0"}

接上文 VM安裝的ubuntu系統,配置雙網卡

點擊編輯 進入虛擬網絡編輯器 點擊更改設置 補充&#xff1a;如何判定橋接至哪張網卡&#xff1f;進入win&#xff0c;winr 輸入cmd&#xff1b;輸入 systeminfo選中系統&#xff0c;點擊右鍵&#xff0c;選中設置 重啟系統使用 ifconfig查看&#xff0c;發現有eth0和eth1…

數學建模 趣味數模問題(數模入門)

狼羊人菜渡河問題 解答 試探法 因為有4個變量,所以一共有222*216種狀態 找出其中不安全的狀態:無人看守的狀態下:狼羊一起,羊菜一起 人 狼 羊 菜(0是在對面,1是在這邊) 狼羊一起:(0,1,1,0) (0,1,1,1) (1,0,0,0) (1,0,0,1) 羊菜一起:(0,0,1,1) (1,1,0,0) 其余的10個都是安全狀態…

數學建模 整數規劃的基本原理和標準形式

整數規劃模型 變量限制為整數 一般解決運輸問題和整數問題 分類: 研究的是純整數規劃問題 整數規劃特點 實數的解不能直接四舍五入為整數,因為此時可能不滿足約束條件 舉例-合理下料問題 模型: 題目: 這是在使用材料 1)使用零件A1-Am毛胚,就是使用零件 2)下料方式B1-Bn就…

程序員 面試筆記 C++ 程序設計的基礎 第10章

10.1.1 程序的編譯和執行 以#開頭的代碼都屬于預處理器處理的步驟#include 將頭文件的內容包含進入當前源文件中#define 展開宏定義#ifdef 處理條件編譯指令(#ifdef、ifndef、#if、#else、#elif、#endif)#other 處理其他宏指令(#error、#warning、#line、#pragma) 預…

數學建模 分支限界算法求解整數規劃原理以及編程實現

引入 線性規劃問題(松弛問題) 圖解法: 使用圖解法求出最優解,再使用四舍五入求出的整數解不滿足條件 完全枚舉法(窮舉法):找出集合內所有滿足條件的整數點,再帶入不等式中,看是否有最優解 分支限界法 說明: 松弛問題:線性規劃問題 ILP:整數規劃,在線性規劃的基礎上對決策…

java Map統計字符串中元素的數量

public int firstUniqChar(String s) {Map<Character, Integer> map new HashMap();char[] chars s.toCharArray();//先統計每個字符的數量for (char ch : chars) {map.put(ch, map.getOrDefault(ch, 0) 1);}//然后在遍歷字符串s中的字符&#xff0c;如果出現次數是1就…

數學建模 割平面算法求解整數規劃基本原理與編程實現

基本思想 松弛問題:線性規劃 割掉一塊全部都是小數的區域(這一部分取不到整數) 案例 1)橫坐標x1,縱坐標x2 2)藍色小三角形的區域:x2:(1,7/4) x1:(0,3/4) 這塊區域,x1與x2完全取不到整數,所以直接切去 所以,此時取值范圍變化了: x2<1把此約束條件帶入,得到x11,x21,z2 3…

Linux dd命令 復制(拷貝)文件,并對原文件進行轉換

dd&#xff0c;是 device driver 的縮寫&#xff0c;它可以稱得上是“Linux 世界中的搬運工”&#xff0c;它用來讀取設備、文件中的內容&#xff0c;并原封不動地復制到指定位置。其實現在的主流硬盤已經是 SATA 接口的了&#xff0c;下面我要備份的硬盤是 dev/sda&#xff0c…

數學建模 匈牙利算法求解整數規劃基本原理與編程實現

投資問題(0-1規劃) 匈牙利算法求解0-1規劃問題 解答: 項目之間是互斥關系,所以使用x1x2x31; 項目5是以項目1為先驗條件,所以x5<x1,意味著x11時,x51或0 ,但x10時,x50 案例- 互斥約束問題 1)當兩個約束條件是互斥時,新建立一個約束條件y(0-1) 2)如果M取無窮大的數,此時就…