目錄
菜單功能
錄入聯(lián)系人信息功能
查看系統(tǒng)中全部信息功能
查看單個(gè)信息功能
刪除全部信息功能
刪除單個(gè)信息功能
修改信息功能
完整代碼
在長(zhǎng)達(dá)一個(gè)多月的學(xué)習(xí)過(guò)程中,終于將C語(yǔ)言學(xué)完,因此專門寫(xiě)一個(gè)C語(yǔ)言課程設(shè)計(jì)來(lái)檢驗(yàn)這一個(gè)多月的學(xué)習(xí)成果,由于寫(xiě)的比較急,因此代碼有些還可以優(yōu)化的地方,還請(qǐng)諒解!下面會(huì)對(duì)每個(gè)函數(shù)塊的作用以及實(shí)現(xiàn)方法做出簡(jiǎn)單的論述。
菜單功能
函數(shù)作用:通過(guò)menu()函數(shù)來(lái)調(diào)用其他要使用到的功能。并在執(zhí)行完以后重新返回該函數(shù)。
實(shí)現(xiàn)方法:主要通過(guò)goto語(yǔ)句,switch語(yǔ)句以及函數(shù)的調(diào)用三種方法來(lái)實(shí)現(xiàn)該功能。
void menu(){
system("cls");
printf(" ---------------------------------\n");
printf(" ----------通訊錄管理系統(tǒng)----------\n");
printf(" ----------1、錄入信息 ---------\n");
printf(" ----------2、查看全部信息---------\n");
printf(" ----------3、查看單個(gè)信息---------\n");
printf(" ----------4、刪除全部信息---------\n");
printf(" ----------5、刪除單個(gè)信息---------\n");
printf(" ----------6、修改單個(gè)信息---------\n");
printf(" ----------7、退出系統(tǒng) ---------\n");
int choice;
printf("選擇任意一個(gè)功能:\n");
loop:
scanf("%d",&choice);
switch (choice){
case 1:
add_people();
menu();
case 2:
views_people();
menu();
case 3:
view_people();
menu();
break;
case 4:
delall_people();
menu();
case 5:
del_people();
menu();
case 6:
revise_people();
menu();
case 7:
exit(1);
break;
default:
printf("輸入錯(cuò)誤!請(qǐng)重新輸入:");
goto loop;
}
}
錄入聯(lián)系人信息功能
函數(shù)作用:在使用其他功能之前,應(yīng)當(dāng)先將部分信息存儲(chǔ)在管理系統(tǒng)中,從而才可以實(shí)現(xiàn)數(shù)據(jù)的增刪改查。
實(shí)現(xiàn)方法:主要通過(guò)動(dòng)態(tài)鏈表的創(chuàng)建而實(shí)現(xiàn),首先創(chuàng)建結(jié)構(gòu)體指針p1,p2,并通過(guò)malloc()函數(shù)獲取空間,其中p1作為首指針,p2作為尾指針。在p1所指向的結(jié)構(gòu)體獲取數(shù)據(jù)之后,令p2所指向的結(jié)構(gòu)體中的next指針,指向p1結(jié)構(gòu)體的地址,這步操作完成之后,p1將其地址賦值給p2.隨后p1再次通過(guò)malloc()函數(shù)獲取一定的空間,在p1指向的結(jié)構(gòu)體獲取數(shù)據(jù)之后,重復(fù)之前的操作,直至不再開(kāi)辟新的空間時(shí)停止,最后將NULL賦值給最后一個(gè)結(jié)構(gòu)體中next指針,使其不再指向任何地址。
void add_people(){ //添加信息
system("cls");
int count;
printf("選擇要添加聯(lián)系人個(gè)數(shù):\n");
scanf("%d",&count);
struct People *p1,*p2;
p1=p2=(struct People*)malloc(LEN);
int i=0;
printf("------------------------------------\n");
if(head==NULL){
head = p1;
}else{
end->next = p1 ;
}
while(count>0){
printf("請(qǐng)輸?shù)?d個(gè)聯(lián)系人信息:\n",++i);
printf("姓名:\n");
scanf("%s",&p1->name);
printf("性別:\n");
scanf("%s",&p1->sex);
printf("電話號(hào)碼:\n");
scanf("%d",&p1->num);
printf("郵箱:\n");
scanf("%s",&p1->email);
printf("家庭地址:\n");
scanf("%s",&p1->addr);
count--;
p2->next=p1;
p2=p1;
p1=(struct People*)malloc(LEN);
system("cls");
}
p2->next=NULL;
end=p2;
printf("全部添加成功!\n");
system("pause");
}
查看系統(tǒng)中全部信息功能
函數(shù)作用:將通訊錄系統(tǒng)中所有數(shù)據(jù)呈現(xiàn)出來(lái)。
實(shí)現(xiàn)方法:定義一個(gè)結(jié)構(gòu)體指針變量(局部變量)pt,將頭指針head賦值給pt,通過(guò)循環(huán)輸出pt指針?biāo)赶虻慕Y(jié)構(gòu)體,并將所指向結(jié)構(gòu)體中的next所指向的地址賦值給pt,從而實(shí)現(xiàn)對(duì)下一個(gè)結(jié)構(gòu)體的訪問(wèn)。
void views_people(){ //查看全部信息
system("cls");
struct People *pt;
if(head!=NULL){
for(pt=head;pt!=NULL;){
printf("姓名:%s\n性別:%s\n電話號(hào)碼:%d\n郵箱:%s\n家庭地址:%s\n",pt->name,pt->sex,pt->num,pt->email,pt->addr);
pt=pt->next;
printf("-------------------------------------------------------------\n");
}
}else{
printf("該系統(tǒng)中無(wú)數(shù)據(jù)!");
}
system("pause");
}
查看單個(gè)信息功能
函數(shù)作用:有目的性地尋找聯(lián)系人的所有信息。
實(shí)現(xiàn)方法:將鏈表中的數(shù)據(jù)一一遍歷,與所輸入的數(shù)據(jù)進(jìn)行對(duì)比,若匹配成功,則將該指針?biāo)赶蚪Y(jié)構(gòu)體中的數(shù)據(jù)輸出。
void view_people(){ //單個(gè)查詢,通過(guò)名字查詢
system("cls");
struct People *pt;
printf("輸入要查詢的聯(lián)系人名字:\n");
char name[10];
int flag=1;
scanf("%s",&name);
for(pt=head;pt!=NULL;){
if(strcmp(pt->name,name)==0){
printf("成功找到!\n");
printf("姓名:%s\n性別:%s\n電話號(hào)碼:%d\n郵箱:%s\n家庭地址:%s\n",pt->name,pt->sex,pt->num,pt->email,pt->addr);
flag=0;
break;
}
pt=pt->next;
}
if(flag){
printf("不好意思,未找到!\n");
}
system("pause");
}
刪除全部信息功能
函數(shù)作用:將管理系統(tǒng)中的所有數(shù)據(jù)刪除。
實(shí)現(xiàn)方法:仍然是對(duì)鏈表一一遍歷,在遍歷的過(guò)程中通過(guò)free()函數(shù)將其開(kāi)辟的空間釋放,從而達(dá)到數(shù)據(jù)刪除的作用。
void delall_people(){ //全部刪除
system("cls");
printf("正在刪除中···\n");
system("pause");
struct People *pt;
for(pt=head;pt!=NULL;){
struct People *temp=pt;
pt=pt->next;
free(pt);
}
head=NULL;
end=NULL;
printf("刪除成功!\n");
system("pause");
}
刪除單個(gè)信息功能
函數(shù)作用:有目的性地刪除一些失效信息
實(shí)現(xiàn)方法:依然是通過(guò)遍歷找到想要?jiǎng)h除的指針,不過(guò)在這之前應(yīng)該定義一個(gè)結(jié)構(gòu)體指針用來(lái)獲取pt的地址。其目的是為了能夠在刪除該指針之前將該指針之前的數(shù)據(jù)與之后的數(shù)據(jù)能夠連接起來(lái)。
void del_people(){ //刪除單個(gè)聯(lián)系人信息
system("cls");
struct People *pt,*temp;
pt=head;
printf("請(qǐng)輸入要?jiǎng)h除的聯(lián)系人:");
char name[10];
scanf("%s",&name);
int flag=1;
while(pt!=NULL){
if(strcmp(name,pt->name)==0){
if(pt==head){
head = pt->next;
flag = 0;
printf("刪除成功!\n");
system("pause");
}else{
printf("刪除成功···\n");
system("pause");
temp->next=pt->next;
free(pt);
flag=0;
break;
}
}
temp=pt;
pt=pt->next;
}
if(flag){
printf("不好意思,未找到!\n");
system("pause");
}
}
修改信息功能
函數(shù)作用:修改通訊錄管理系統(tǒng)中的一些錯(cuò)誤信息
實(shí)現(xiàn)方法:其核心依然是通過(guò)遍歷找到要修改的指針,從而實(shí)現(xiàn)對(duì)數(shù)據(jù)的修改。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-788755.html
void del_people(){ //刪除單個(gè)聯(lián)系人信息
system("cls");
struct People *pt,*temp;
pt=head;
printf("請(qǐng)輸入要?jiǎng)h除的聯(lián)系人:");
char name[10];
scanf("%s",&name);
int flag=1;
while(pt!=NULL){
if(strcmp(name,pt->name)==0){
printf("刪除成功···\n");
system("pause");
temp->next=pt->next;
free(pt);
flag=0;
break;
}
temp=pt;
pt=pt->next;
}
if(flag){
printf("不好意思,未找到!\n");
system("pause");
}
}
完整代碼
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#define LEN sizeof(struct People)
struct People{
char name[10]; //姓名
char sex[4]; //性別
int num; //電話號(hào)碼
char email[20]; //郵箱
char addr[30]; //家庭地址
struct People* next;
};
struct People* head =NULL;
struct People* end =NULL;
void add_people(){ //添加信息
system("cls");
int count;
printf("選擇要添加聯(lián)系人個(gè)數(shù):\n");
scanf("%d",&count);
struct People *p1,*p2;
p1=p2=(struct People*)malloc(LEN);
int i=0;
printf("------------------------------------\n");
if(head==NULL){
head = p1;
}else{
end->next = p1 ;
}
while(count>0){
printf("請(qǐng)輸?shù)?d個(gè)聯(lián)系人信息:\n",++i);
printf("姓名:\n");
scanf("%s",&p1->name);
printf("性別:\n");
scanf("%s",&p1->sex);
printf("電話號(hào)碼:\n");
scanf("%d",&p1->num);
printf("郵箱:\n");
scanf("%s",&p1->email);
printf("家庭地址:\n");
scanf("%s",&p1->addr);
count--;
p2->next=p1;
p2=p1;
p1=(struct People*)malloc(LEN);
system("cls");
}
p2->next=NULL;
end=p2;
printf("全部添加成功!\n");
system("pause");
}
void views_people(){ //查看全部信息
system("cls");
struct People *pt;
if(head!=NULL){
for(pt=head;pt!=NULL;){
printf("姓名:%s\n性別:%s\n電話號(hào)碼:%d\n郵箱:%s\n家庭地址:%s\n",pt->name,pt->sex,pt->num,pt->email,pt->addr);
pt=pt->next;
printf("-------------------------------------------------------------\n");
}
}else{
printf("該系統(tǒng)中無(wú)數(shù)據(jù)!");
}
system("pause");
}
void delall_people(){ //全部刪除
system("cls");
printf("正在刪除中···\n");
system("pause");
struct People *pt;
for(pt=head;pt!=NULL;){
struct People *temp=pt;
pt=pt->next;
free(pt);
}
head=NULL;
end=NULL;
printf("刪除成功!\n");
system("pause");
}
void view_people(){ //單個(gè)查詢,通過(guò)名字查詢
system("cls");
struct People *pt;
printf("輸入要查詢的聯(lián)系人名字:\n");
char name[10];
int flag=1;
scanf("%s",&name);
for(pt=head;pt!=NULL;){
if(strcmp(pt->name,name)==0){
printf("成功找到!\n");
printf("姓名:%s\n性別:%s\n電話號(hào)碼:%d\n郵箱:%s\n家庭地址:%s\n",pt->name,pt->sex,pt->num,pt->email,pt->addr);
flag=0;
break;
}
pt=pt->next;
}
if(flag){
printf("不好意思,未找到!\n");
}
system("pause");
}
void revise_people(){ //修改內(nèi)容
system("cls");
struct People *pt;
printf("輸入要修改的聯(lián)系人名字:\n");
char name[10];
int flag=1;
scanf("%s",&name);
for(pt=head;pt!=NULL;){
if(strcmp(name,pt->name)==0){
printf("成功找到!\n");
printf("姓名:%s\n性別:%s\n電話號(hào)碼:%d\n郵箱:%s\n家庭地址:%s\n",pt->name,pt->sex,pt->num,pt->email,pt->addr);
flag=0;
printf("請(qǐng)分別進(jìn)行修改:\n");
printf("姓名:\n");
scanf("%s",&pt->name);
printf("性別:\n");
scanf("%s",&pt->sex);
printf("電話號(hào)碼:\n");
scanf("%d",&pt->num);
printf("郵箱:\n");
scanf("%s",&pt->email);
printf("家庭地址:\n");
scanf("%s",&pt->addr);
break;
}
pt=pt->next;
}
if(flag){
printf("不好意思,未找到!\n");
}
system("pause");
}
void del_people(){ //刪除單個(gè)聯(lián)系人信息
system("cls");
struct People *pt,*temp;
pt=head;
printf("請(qǐng)輸入要?jiǎng)h除的聯(lián)系人:");
char name[10];
scanf("%s",&name);
int flag=1;
while(pt!=NULL){
if(strcmp(name,pt->name)==0){
if(pt==head){
head = pt->next;
flag = 0;
printf("刪除成功!\n");
system("pause");
}else{
printf("刪除成功···\n");
system("pause");
temp->next=pt->next;
free(pt);
flag=0;
break;
}
}
temp=pt;
pt=pt->next;
}
if(flag){
printf("不好意思,未找到!\n");
system("pause");
}
}
void menu(){
system("cls");
printf(" ---------------------------------\n");
printf(" ----------通訊錄管理系統(tǒng)----------\n");
printf(" ----------1、錄入信息 ---------\n");
printf(" ----------2、查看全部信息---------\n");
printf(" ----------3、查看單個(gè)信息---------\n");
printf(" ----------4、刪除全部信息---------\n");
printf(" ----------5、刪除單個(gè)信息---------\n");
printf(" ----------6、修改單個(gè)信息---------\n");
printf(" ----------7、退出系統(tǒng) ---------\n");
int choice;
printf("選擇任意一個(gè)功能:\n");
loop:
scanf("%d",&choice);
switch (choice){
case 1:
add_people();
menu();
case 2:
views_people();
menu();
case 3:
view_people();
menu();
break;
case 4:
delall_people();
menu();
case 5:
del_people();
menu();
case 6:
revise_people();
menu();
case 7:
exit(1);
break;
default:
printf("輸入錯(cuò)誤!請(qǐng)重新輸入:");
goto loop;
}
}
int main(){
void add_people();
void views_people();
void delall_people();
void view_people();
void revise_people();
void del_people();
void menu();
menu();
return 0;
}
其中可能會(huì)有一些令人難以解讀的地方,還請(qǐng)?jiān)u論區(qū)告訴我,對(duì)其加以修改。?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-788755.html
到了這里,關(guān)于C語(yǔ)言課程設(shè)計(jì)|通訊錄管理系統(tǒng)(含完整代碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!