C語言實現(xiàn)簡單通訊錄管理系統(tǒng)
C語言實現(xiàn)的通訊錄管理系統(tǒng),供大家參考,具體內(nèi)容如下
設(shè)計一個學(xué)生通信錄,學(xué)生通迅錄數(shù)據(jù)信息構(gòu)成內(nèi)容可自行設(shè)計(如:學(xué)號、姓名、電話號碼、所在班級、寢室地址等),通信錄數(shù)據(jù)類型定義為結(jié)構(gòu)體類型。
主要實現(xiàn)功能包括:
(1)創(chuàng)建學(xué)生通訊錄
(2)修改學(xué)生通訊錄
(3)增刪學(xué)生通訊錄
(4)能夠按多種方式進(jìn)行查詢(如:①按學(xué)號查詢;②按所在班級查詢)
源代碼:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#include<windows.h>
#include<time.h>
typedef struct people
{
char name[10]; //姓名
char IDnumber[20];//學(xué)號
char phone[15]; // 手機(jī)號
int classNum; //班級
char roomID[10]; //寢室
}people; //定義別名people
//函數(shù)模塊定義
void UI_show();//進(jìn)入界面 UI 實現(xiàn)
void NEW_in(); //新學(xué)生信息添加
void OLD_adjust();//修改學(xué)生信息
void OLD_delete(); //刪除學(xué)生信息
void OLD_find(); //學(xué)生信息查找
void OLD_findByNum();//通過學(xué)號查找
void OLD_findByName();//通過姓名查找
//各種UI界面顯示
void UI_show1();
void UI_show2();
void UI_show3();
void UI_show4();
void UI_show5();
void UI_show6();
//=======================================================================
//進(jìn)入界面 UI 實現(xiàn)
void UI_show()
{
int i;
//--------------------------------------------------------------------
printf("\n");
for (i = 0; i < 75; i++) //數(shù)字用來 控制 上方 = 數(shù)量
{
printf("=");
}
printf("\n");
for (i = 0; i < 30; i++)
{
printf(" ");
}
printf("歡迎進(jìn)入通訊錄管理系統(tǒng)");
for (i = 0; i < 30; i++)
{
printf(" ");
}
printf("\n");
for (i = 0; i < 75; i++)
{
printf("=");
}
//實現(xiàn)上方歡迎界面
//--------------------------------------------------------------------
printf("\n\n\n");
for (i = 0; i < 33; i++) //以下實現(xiàn) 菜單界面功能選擇
{
printf(" ");
}
printf("請選擇以下功能:\n");
for (i = 0; i < 33; i++)
{
printf(" ");
}
printf("1、添加學(xué)生通訊錄\n");
for (i = 0; i < 33; i++)
{
printf(" ");
}
printf("2、修改學(xué)生通訊錄\n");
for (i = 0; i < 33; i++)
{
printf(" ");
}
printf("3、刪除學(xué)生通訊錄\n");
for (i = 0; i < 33; i++)
{
printf(" ");
}
printf("4、查找通訊錄信息\n");
for (i = 0; i < 33; i++)
{
printf(" ");
}
printf("5、退出系統(tǒng)");
printf("\n\n");
for (i = 0; i < 75; i++) //數(shù)字 控制 上方 = 數(shù)量
{
printf("=");
}
printf("\n\n");
for (i = 0; i < 33; i++)
{
printf(" ");
}
printf("請選擇:");
//實現(xiàn)界面UI
}
//=======================================================================
//添加學(xué)生到通訊錄
void NEW_in()
{
FILE* fp = NULL; //定義文件指針
fp = fopen("output.txt", "a");//以追加的方式打開 文件
if (fp == NULL)
{
printf("\n出現(xiàn)未知錯誤!按任意鍵退出.....\n");
exit(0);
}
int classNum; //班級
char name[10]; //姓名
char IDnumber[20];//學(xué)號
char phone[15]; // 手機(jī)號
char roomID[10]; //寢室
char ch; //鍵盤輸入選擇
system("cls"); //清屏
UI_show1(); // 界面顯示1;
while (1) //進(jìn)入循環(huán)體,直到接收到信息 跳出循環(huán)
{
printf("請輸入姓名:");
scanf("%s", name);
printf("請輸入學(xué)號:");
scanf("%s", IDnumber);
printf("請輸入聯(lián)系電話:");
scanf("%s", phone);
printf("請輸入寢室:");
scanf("%s", roomID);
printf("請輸入班級:");
scanf("%d", &classNum);
//緩沖區(qū)保存到文件
fprintf(fp, "%s %s %s %s %d \n", name, IDnumber, phone, roomID, classNum);
do // 接收字符 判斷是否 繼續(xù)錄入用戶信息
{
printf("是否繼續(xù)錄入?請選擇(Y/N)");
getchar(); //接收 回車鍵
scanf("%c", &ch);
} while ((ch != 'Y') && (ch != 'y') && (ch != 'n') && (ch != 'N'));
if ((ch == 'n') || (ch == 'N'))
{
fclose(fp); //如果用戶 輸入N 則保存 并退出程序
break;
}
}
}
//=========================================================================
//修改學(xué)生通訊錄信息
void OLD_adjust()
// 先將硬盤文件中數(shù)據(jù) 保存到 內(nèi)存緩沖區(qū)中,找到要修改的用戶信息,修改后 重新寫入文檔
{
system("cls"); //清屏
people peopleI[100];//建立結(jié)構(gòu)體 數(shù)組
int number = 0, sign = 0, i = 1, a, test;
char name[10], ch;
int classNum; //班級
char IDnumber[20];//學(xué)號
char phone[15]; // 手機(jī)號
char roomID[10]; //寢室
FILE* fp = NULL; //文件指針
UI_show2(); //UI調(diào)用
fp = fopen("output.txt", "r+"); //以讀寫的方式打開文件
if (fp == NULL) // 錯誤檢測
{
printf("文件打開失?。≌埾忍砑佑脩粜畔?!\n");
return;
}
printf("請輸入要修改的學(xué)生姓名:");
scanf("%s", name);
while (!feof(fp)) //從文件中讀取
{
fscanf(fp, "%s %s %s %s %d", peopleI[i].name, peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID, &peopleI[i].classNum);
i++; //記錄行的個數(shù)
}
printf("\n");
i--;
test = i; //保存 數(shù)據(jù)的行數(shù)
for ( ; i >= 0; i--)
{
a = strcmp(name, peopleI[i].name); //比較 輸入的用戶名 和文件中的用戶名
if (a == 0)
{
sign = 1; //判斷 賦值1 代表找到 該數(shù)據(jù)
printf("姓名%s,學(xué)號%s,聯(lián)系電話%s,寢室%s,班級%d\n", peopleI[i].name, peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID,peopleI[i].classNum);
do // 友情提示 選擇
{
printf("你確定要修改該用戶的信息嗎?(Y/N):");
getchar();
scanf("%c", &ch);
} while ((ch != 'Y') && (ch != 'y') && (ch != 'n') && (ch != 'N'));
if ((ch == 'y') || (ch == 'Y')) //如果 選y則 錄入信息
{
printf("請輸入姓名:");
scanf("%s", name);
printf("請輸入學(xué)號:");
scanf("%s", IDnumber);
printf("請輸入聯(lián)系電話:");
scanf("%s", phone);
printf("請輸入寢室:");
scanf("%s", roomID);
printf("請輸入班級:");
scanf("%d", &classNum);
printf("修改成功!");
fclose(fp); //關(guān)閉文件
fp = fopen("output.txt", "w");
for (i = 1; i < test; i++) //將內(nèi)存中 修改過的信息 重新寫入文件
{
fscanf(fp, "%s %s %s %s %d", peopleI[i].name, peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID, &peopleI[i].classNum);
}
fclose(fp);
break; //跳出 for循環(huán)
}
else //假如不修改信息 再次寫入文件
{
fclose(fp);
break;
}
}
}
if (sign == 0)
{
printf("沒找到該用戶!\n請按任意鍵繼續(xù)....");
getchar();
}
}
//===============================================================================
//刪除住戶信息的功能
void OLD_delete()
{
// 先將硬盤文件中數(shù)據(jù) 保存到 內(nèi)存緩沖區(qū)中,找到要刪除的用戶信息,刪除后 重新寫入文檔
system("cls"); //清屏
people peopleI[10000];//建立結(jié)構(gòu)體 數(shù)組
int number = 0, len = 0, sign = 0, i = 1, a, test, j;
char name[10], ch;
FILE* fp = NULL; //文件指針
UI_show3();
fp = fopen("output.txt", "r");
if (fp == NULL)
{
printf("未找到文件!");
return; //返回 main函數(shù)
}
printf("請輸入要刪除的住戶姓名:");
scanf("%s", name);
while (!feof(fp)) //從文件中讀取,文件中數(shù)據(jù)轉(zhuǎn)移到內(nèi)存數(shù)組中區(qū)
{ //!feof(fp)只要文件不到末尾 就一直讀下去
fscanf(fp, "%s %s %s %s %d", peopleI[i].name, peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID, &peopleI[i].classNum);
i++;
}
///------------------------------------
fclose(fp); //保存文件
printf("\n");
i--;
test = i; //保存 行數(shù)
for (; i >= 0; i--)
{
a = strcmp(name, peopleI[i].name); //比較 輸入的用戶名 和文件中的用戶名
if (a == 0) //找到相應(yīng)位置
{
sign = 1; // 標(biāo)志 是否找到 數(shù)據(jù)
printf("姓名%s,學(xué)號%s,聯(lián)系電話%s,寢室%s,班級%d\n", peopleI[i].name, peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID,peopleI[i].classNum);
//顯示出要修改的信息
do
{
printf("你確定要刪除該用戶的信息嗎?(Y/N):");
getchar();
scanf("%c", &ch);
} while ((ch != 'Y') && (ch != 'y') && (ch != 'n') && (ch != 'N'));
if ((ch == 'y') || (ch == 'Y')) //假如 確定
{
printf("刪除成功!");
fp = fopen("output.txt", "w"); //以寫的方式打開,源文件被清除
for (j = 1; j < test; j++) //重新寫入文件
{
if (j == i) // 不寫入 第i個數(shù)據(jù)
{
//操作為空
}
else //否則 寫入文件
fscanf(fp, "%s %s %s %s %d", peopleI[i].name, peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID, &peopleI[i].classNum);
}
fclose(fp); //關(guān)閉 保存緩沖區(qū) 文件
}
else //假如不修改信息 再次寫入文件
{
fp = fopen("output.txt", "w"); //以寫的方式打開,源文件被清除
for (i = 1; i < test; i++) //將內(nèi)存中 修改過的信息 重新寫入文件
{
fscanf(fp, "%s %s %s %s %d", peopleI[i].name, peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID, &peopleI[i].classNum);
}
fclose(fp);
}
}
}
if (sign == 0) //判斷為未找到用戶
{
printf("沒找到該用戶!\n請按回車鍵返回菜單選項.....");
getchar();
}
}
//========================================================================================
//查詢通訊錄信息;
void OLD_find(){
system("cls");
int temp;
UI_show5();
printf("1.按學(xué)號查詢通訊錄信息\t2.按姓名查詢通訊錄信息\n");
printf("請選擇……");
scanf("%d",&temp);
switch(temp){
case 1:
system("cls");
OLD_findByNum();
break;
case 2:
system("cls");
OLD_findByName();
break;
default:printf("\n\t\t\t輸入錯誤! 按回車鍵返回重新選擇");
}
_getch();
system("cls");
}
//===================================================================================
//按照學(xué)號查詢通訊錄信息
void OLD_findByNum()
// 先將硬盤文件中數(shù)據(jù) 保存到 內(nèi)存緩沖區(qū)中,找到要用戶信息,修改后 重新寫入文檔
{
system("cls"); //清屏
people peopleI[100];//建立結(jié)構(gòu)體 數(shù)組
int number = 0, sign = 0, i = 1, test;
int p;
char IDnumber[20];
FILE* fp = NULL; //文件指針
void UI_show5(); //UI調(diào)用
fp = fopen("output.txt", "r"); //以讀寫的方式打開文件
if (fp == NULL) // 錯誤檢測
{
printf("文件打開失??!請先添加用戶信息!\n");
return;
// exit(0);
}
printf("請輸入要查詢的學(xué)號:");
scanf("%s",IDnumber);
while (!feof(fp)) //從文件中讀取
{
fscanf(fp, "%s %s %s %s %d", peopleI[i].name, peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID, &peopleI[i].classNum);
i++; //記錄行的個數(shù)
}
printf("\n");
i--;
test = i; //保存 數(shù)據(jù)的行數(shù)
for (; i >= 0; i--)
{
//比較 輸入的學(xué)號 和文件中的學(xué)號
p=strcmp(IDnumber,peopleI[i].IDnumber);
if (p==0)
{
sign = 1; //判斷 賦值1 代表找到 該數(shù)據(jù)
printf("姓名%s,學(xué)號%s,聯(lián)系電話%s,寢室%s,班級%d\n", peopleI[i].name, peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID,peopleI[i].classNum);
printf("\n");
fclose(fp); //關(guān)閉文件
}
else //假如meiyou信息 再次寫入文件
{
fclose(fp);
}
}
if (sign == 0)
{
printf("沒找到該學(xué)生信息!\n請按任意鍵繼續(xù)....");
getchar();
}
}
//===================================================================================
//按照姓名查詢通訊錄信息
void OLD_findByName()
// 先將硬盤文件中數(shù)據(jù) 保存到 內(nèi)存緩沖區(qū)中,找到要用戶信息,修改后 重新寫入文檔
{
system("cls"); //清屏
people peopleI[100];//建立結(jié)構(gòu)體 數(shù)組
int number = 0, sign = 0, i = 1, test;
int p;
char name[10];
FILE* fp = NULL; //文件指針
void UI_show6(); //UI調(diào)用
fp = fopen("output.txt", "r"); //以讀寫的方式打開文件
if (fp == NULL) // 錯誤檢測
{
printf("文件打開失??!請先添加用戶信息!\n");
return;
// exit(0);
}
printf("請輸入要查詢的姓名:");
scanf("%s",name);
while (!feof(fp)) //從文件中讀取
{
fscanf(fp, "%s %s %s %s %d", peopleI[i].name, peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID, &peopleI[i].classNum);
i++; //記錄行的個數(shù)
}
printf("\n");
i--;
test = i; //保存 數(shù)據(jù)的行數(shù)
for (; i >= 0; i--)
{
//比較 輸入的姓名 和文件中的姓名
p=strcmp(name,peopleI[i].name);
if (p==0)
{
sign = 1; //判斷 賦值1 代表找到 該數(shù)據(jù)
printf("姓名%s,學(xué)號%s,聯(lián)系電話%s,寢室%s,班級%d\n", peopleI[i].name, peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID,peopleI[i].classNum);
printf("\n");
fclose(fp); //關(guān)閉文件
}
else //假如meiyou信息 再次寫入文件
{
fclose(fp);
}
}
if (sign == 0)
{
printf("沒找到該學(xué)生信息!\n請按任意鍵繼續(xù)....");
getchar();
}
}
//===================================================================================
//判斷文件是否為空
int NEW_oj()
{
FILE* fp;
fp = fopen("output.txt", " r");
if (fp == NULL)
{
fp = fopen("output.txt", " w");
}
if (fgetc(fp) == EOF)
{
fclose(fp);
return 0;
}
else
{
return 1;
fclose(fp);
}
}
//===================================================================================
// 各種UI界面顯示
void UI_show1()
{
int i;
for (i = 0; i < 75; i++) //數(shù)字 控制 上方 = 數(shù)量
{
printf("=");
}
printf("\n");
for (i = 0; i < 15; i++)
{
printf(" ");
}
printf("你正在添加通訊錄學(xué)生信息,請根據(jù)提示輸入信息。\n");
for (i = 0; i < 75; i++) //數(shù)字 控制 上方 = 數(shù)量
{
printf("=");
}
printf("\n");
}
void UI_show2()
{
int i;
for (i = 0; i < 75; i++) //數(shù)字 控制 上方 = 數(shù)量
{
printf("=");
}
printf("\n");
for (i = 0; i < 15; i++)
{
printf(" ");
}
printf("你正在修改通訊錄學(xué)生信息,請根據(jù)提示輸入信息。\n");
for (i = 0; i < 75; i++) //數(shù)字 控制 上方 = 數(shù)量
{
printf("=");
}
printf("\n");
}
void UI_show3()
{
int i;
for (i = 0; i < 75; i++) //數(shù)字 控制 上方 = 數(shù)量
{
printf("=");
}
printf("\n");
for (i = 0; i < 15; i++)
{
printf(" ");
}
printf("你正在刪除通訊錄學(xué)生信息,請根據(jù)提示輸入信息。\n");
for (i = 0; i < 75; i++) //數(shù)字 控制 上方 = 數(shù)量
{
printf("=");
}
printf("\n");
}
void UI_show4()
{
int i;
for (i = 0; i < 75; i++) //數(shù)字 控制 上方 = 數(shù)量
{
printf("=");
}
printf("\n");
for (i = 0; i < 15; i++)
{
printf(" ");
}
printf("你正在使用通訊錄查詢功能,請根據(jù)提示輸入信息。\n");
for (i = 0; i < 75; i++) //數(shù)字 控制 上方 = 數(shù)量
{
printf("=");
}
printf("\n");
}
void UI_show5()
{
int i;
for (i = 0; i < 75; i++) //數(shù)字 控制 上方 = 數(shù)量
{
printf("=");
}
printf("\n");
for (i = 0; i < 15; i++)
{
printf(" ");
}
printf("你正在使用按學(xué)號查找功能。\n");
for (i = 0; i < 75; i++) //數(shù)字 控制 上方 = 數(shù)量
{
printf("=");
}
printf("\n");
}
void UI_show6()
{
int i;
for (i = 0; i < 75; i++) //數(shù)字 控制 上方 = 數(shù)量
{
printf("=");
}
printf("\n");
for (i = 0; i < 15; i++)
{
printf(" ");
}
printf("你正在使用按姓名查找功能。\n");
for (i = 0; i < 75; i++) //數(shù)字 控制 上方 = 數(shù)量
{
printf("=");
}
printf("\n");
}
int main()
{
int pan, p;
while (1)
{
p = NEW_oj();//判斷用戶文件是否為空
if (p == 0)
{
printf("\n\n查詢文件中未存在學(xué)生信息,請先進(jìn)行信息錄入!!!");
printf("\n請按回車鍵,進(jìn)入信息添加系統(tǒng).....");
getchar();
NEW_in();
}
system("cls"); //清屏
UI_show(); //調(diào)用 界面UI 顯示
scanf("%d", &pan);
switch (pan)
{
case 1:NEW_in(); break;//通訊錄學(xué)生信息添加
case 2:OLD_adjust(); break;//通訊錄學(xué)生信息修改
case 3:OLD_delete(); break;//通訊錄學(xué)生信息刪除
case 4:OLD_find(); break;//查詢通訊錄學(xué)生信息
case 5:exit(0); break;//退出系統(tǒng)
default:printf("\n\t\t\t輸入錯誤! 按回車鍵返回重新選擇");//按鍵錯誤反饋
}
_getch();
system("cls");//清屏
}
system("pause");
return 0;
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
如何用C++求兩個數(shù)的最大公約數(shù)和最小公倍數(shù)
最大公約數(shù)是指兩個或多個整數(shù)共有約數(shù)中,最大的一個約數(shù),常用的方法是歐幾里得算法,也叫輾轉(zhuǎn)相除法,下面這篇文章主要給大家介紹了關(guān)于如何用C++求兩個數(shù)的最大公約數(shù)和最小公倍數(shù)的相關(guān)資料,需要的朋友可以參考下2023-01-01
深入理解C++中public、protected及private用法
這篇文章主要介紹了C++中public、protected及private用法,對于C++面向?qū)ο蟪绦蛟O(shè)計來說是非常重要的概念,需要的朋友可以參考下2014-08-08

