“c语言+结构体+链表”实现名片系统
//名片系统
//第一步: 创建名片 姓名: 年龄:(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;
}