“c語言+結構體+連結串列”實現名片系統

小尚不浪發表於2024-03-12

//名片系統
//第一步: 建立名片 姓名: 年齡:(23) 手機號:(預設為171****3422) 地址:河南洛陽
// 公司: tzh 職務: 學員
//輸出名片資訊
//
//第二步: 刪除已存在的名片
//
//第三步: 修改資訊 #可指定修改內容
//
//第四步: 查詢資訊 #可查詢相關姓名對應的資訊
//
//第五步:退出系統
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#define LEN sizeof(struct card)
int len; //記錄card數量

typedef struct card{ //使用者資訊的結構體
char username[20];
char age[20];
char phone[20];
char adress[20];
char company[20];
char job[20];
struct card *next; //指向下一個名片資訊
} card;

//建立名片
struct card *create(){
card *head_cardlist;
card *c1,*c2; //初始化連結串列指標
char name[20];
len=0;
c1=(card *)malloc(LEN);
c2=c1;
printf("錄入人員資訊!\n");
printf("請輸入你的姓名: ");
gets(name);
if(strcmp(name,"n") !=0){ //strcmp比較兩個字串,並根據比較結果返回一個整數
strcpy(c1->username,name); //strcpy把含有'\0'結束符的字串複製到另一個地址空間
printf("請輸入年齡: ");gets(c1->age); //名字資訊輸入e時結束名片錄入
printf("請輸入手機號:");gets(c1->phone);
printf("請輸入地址:");gets(c1->adress);
printf("請輸入公司:");gets(c1->company);
printf("請輸入職位:");gets(c1->job);
head_cardlist = NULL;
while(1){
len=len+1; //個數
if(len==1){
head_cardlist=c1;
}
else{
c2->next=c1;
}
c2 = c1;
printf("請輸入姓名:");
gets(name);
if(strcmp(name,"e") ==0){
break;
} else{
c1=(card *)malloc(LEN);
strcpy(c1->username,name);
printf("請輸入年齡: ");gets(c1->age);
printf("請輸入手機號:");gets(c1->phone);
printf("請輸入地址:");gets(c1->adress);
printf("請輸入公司:");gets(c1->company);
printf("請輸入職位:");gets(c1->job);
}
}
c2->next =NULL;
return head_cardlist;
}
else{
return head_cardlist;
}
}

//刪除名片
card *delete(card *head_card){
card *d1,*d2;
char name[20];
if(head_card == NULL){
printf("暫無名片,不能進行刪除操作!\n");
}
printf("請輸入您要刪除名片的姓名: ");
gets(name);
for(d1=d2=head_card;d1 != NULL;){
if(strcmp(d1->username,name)==0){
d1=head_card;
head_card = head_card->next;
free(d1); //free():釋放記憶體空間函式;
printf("該名片已刪除成功!\n");
d2=d1=head_card;
len--;
return head_card;
}
else{
d2=d1;
d1=d1->next;
}
}
printf("您要刪除的名片不存在\n");
return head_card;
}

//修改名片
void modify(card *head_card){
card *m1,*m2;
char name[20];
int M=0;
if(head_card == NULL){
printf("暫無名片,不能進行修改!");
}
m1 =head_card;
if(m1 !=NULL){
printf("請輸入要修改名片的姓名:");
gets(name);
while(strcmp(m1->username ,name) !=0 && m1->next !=NULL ){
m2=m1;
m1=m1->next ;
}
if(strcmp(m1->username ,name)==0){
M++;
printf("-----您要修改的名片是-----");
printf("姓名:%s\n年齡:%s\n手機號:%s\n地址:%s\n公司:%s\n職位:%s\n",\
m1->username,m1->age,m1->phone,m1->adress,m1->company,m1->job);
printf("--------------------------");
switch(1){
case 1:{
printf("請輸入姓名: ");
gets(name);
strcpy(m1->username,name);
printf("姓名已修改為:%s\n",m1->username );
}
case 2:{
char modifyage[20];
printf("請輸入年齡: ");
gets(modifyage);
strcpy(m1->age,modifyage);
printf("年齡已修改為:%s\n",m1->age );
}
case 3:{
char modifyphone[20];
printf("請輸入電話號: ");
gets(modifyphone);
strcpy(m1->phone,modifyphone);
printf("電話號已修改為:%s\n",m1->phone );
}
case 4:{
char modifyadress[20];
printf("請輸入地址: ");
gets(modifyadress);
strcpy(m1->adress,modifyadress);
printf("地址已修改為:%s\n",m1->adress );
}
case 5:{
char modifycompany[20];
printf("請輸入公司: ");
gets(modifycompany);
strcpy(m1->company,modifycompany);
printf("公司已修改為:%s\n",m1->company );
}
case 6:{
char modifyjob[20];
printf("請輸入職位: ");
gets(modifyjob);
strcpy(m1->job,modifyjob);
printf("職位已修改為:%s\n",m1->job );
}
break;
default:
printf("您輸入有誤,請重新操作!\n");
break;
}
}
if(M == 0){
printf("無此人資訊,不能進行修改!\n");
}
}
}

//查詢名片
void search(card *head_card){
card *s1;
char name[20];
int S=0;
if(head_card == NULL){
printf("暫無此人!");
}
s1 = head_card;
if(s1 !=NULL){
printf("請輸入所查詢人姓名:");
gets(name);
while(strcmp(s1->username,name) != 0 && s1->next != NULL)
{
s1=s1->next;
}
if(strcmp(s1->username,name) == 0){
S++;
printf("聯絡人:\n姓名:%s\n年齡:%s\n手機號:%s\n地址:%s\n公司:%s\n職位:%s\n",\
s1->username,s1->age,s1->phone,s1->adress,s1->company,s1->job);
}
if( S==0){
printf("無此人名片\n");
}
}
}


//顯示名片
void show(card *head_card){
card *p;
p= head_card;
if(p != NULL){
printf("已記錄名片共有%d人;\n",len);
if(p !=NULL){
do{
printf("姓名:%s\n年齡:%s\n手機號:%s\n地址:%s\n公司:%s\n職位:%s\n",\
p->username,p->age,p->phone,p->adress,p->company,p->job);
p = p->next;
}while(p !=NULL);
}
}
else{
printf("空!\n");
}
}

void menu(){ //顯示初始頁面系統選項
printf("---------名片系統---------\n");
printf(" [0]退出系統\n");
printf(" [1]建立名片\n");
printf(" [2]刪除名片\n");
printf(" [3]修改名片\n");
printf(" [4]查詢名片\n");
printf("---------------------------\n");
printf("請輸入功能選項(0~4):");
}

int main(){
struct card *pc=NULL;
int n; //定義輸入的數字選項;
while(1){
menu();
if(n>=0 && n<=4){
scanf("%d",&n);
fflush(stdin); //重新整理、清空輸入緩衝區
}
else{
printf("您輸入錯誤!\n");
return 0;
}

switch(n){
case 1:{
pc= create();
show(pc);
}break;
case 2:{
delete(pc);
}break;
case 3:{
modify(pc);
show(pc);
}break;
case 4:{
search(pc);
}break;
case 0:
printf("您已退出當前系統!\n");
break;
}
if(n==0){
break;
}
}
return 0;
}

相關文章