m0_59124595 2021-06-14 11:20 采纳率: 100%
浏览 371
已采纳

C语言小型通讯录程序

设计一个实用的小型通讯录程序,具有添加,查询和删除功能。由姓名,籍贯,电话号码1,电话号码2,电子邮箱组成,姓名可以由字符和数字混合编码。电话号码可由字符和数字组成。实现功能: 
(1)系统以菜单方式工作 
(2)信息录入功能   
(3)信息浏览功能   
(4)信息查询功能   
(5)信息修改功能 
(6)系统退出功能

希望写出能运行的代码,尽量在两天能完成,谢谢大家

  • 写回答

2条回答 默认 最新

  • 关注
    #include<stdio.h> 
    #include<stdlib.h>  
    #include<string.h>
    struct workers
    {
    	char jobNo[20];       //职工号
    	char name[20];        //姓名
    	char sex[4];         //性别
    	char birthday[15];    //出生年月
    	char degree[15];      //学历
    	char position[30];    //职务 
    	char salary[10];         //工资 
    	char addr[100];        //住址 
    	char tel[20];         //电话 
     
    };
     
     
    //类型定义语句  
    typedef struct node
    {
    	struct workers data;
    	struct node *next;
     
    }Node;
     
     
    //添加信息函数     "尾插法建表"
    void Add(Node *worker)
    {
    	Node *p, *q;
    	char n[10]; 
    	q = worker; 
    	while (q->next != NULL)
    	{
    		q = q->next;     
    	}
    	while (1)
    	{
    		printf("提示:输入0返回主菜单!\n");
    		printf("请输入职工号:");
    		scanf("%s", n);
    		if (strcmp(n, "0") == 0)
    		{
    			break;
    		}
    		p = (Node *)malloc(sizeof(Node));
    		strcpy(p->data.jobNo, n);
    		
    		printf("请输入姓名:");
    		scanf("%s", p->data.name);
    		printf("请输入性别:");
    		scanf("%s", p->data.sex);
    		printf("请输入出生年月:");
    		scanf("%s", p->data.birthday);
    		printf("请输入学历:");
    		scanf("%s", p->data.degree);
    		printf("请输入职务:");
    		scanf("%s", p->data.position);
    		printf("请输入工资:");
    		scanf("%s", p->data.salary);
    		printf("请输入住址:");
    		scanf("%s", p->data.addr);
    		printf("请输入电话:");
    		scanf("%s", p->data.tel);
    		printf("提示:已经完成一条记录的添加!");
    		p->next = NULL;
    		q->next = p;      
    		q = p;        
     
    	}
     
    }
     
     
    //修改职工信息函数
    int  Modify(Node *worker)
    {
    	Node *p;
    	char find[20];   
    	p = worker->next;   
    	if (p == NULL)
    	{
    		printf("\n提示:没有资料可以修改!\n");
    		return 0;
    	}
    	
    	printf("请输入要修改的职工号");
    	scanf("%s", find);
     
    	while (p != NULL) 
    	{
    		if (strcmp(p->data.jobNo, find) == 0)
    		{
    			break;
    		}
    		p = p->next;
    	}
    	
    	if (p!=NULL)
    	{
    		int x;
    		while (1)
    		{
    			printf("完成修改请输入0,否则输入非0数字进行修改!");
    			scanf("%d", &x);
    			if (x == 0)
    			{
    				break;
    			}
    			printf(" 请输入新职工号: ");
    			scanf("%s", p->data.jobNo);
    			printf(" 请输入新职工姓名: ");
    			scanf("%s", p->data.name);
    			printf(" 请输入新职工性别: ");
    			scanf("%s", p->data.sex);
    			printf(" 请输入新职工出生年月: ");
    			scanf("%s", p->data.birthday);
    			printf(" 请输入新职工学历: ");
    			scanf("%s", p->data.degree);
    			printf(" 请输入新职工职务: ");
    			scanf("%s", p->data.position);
    			printf(" 请输入新职工工资: ");
    			scanf("%s", p->data.salary);
    			printf(" 请输入新职工住址: ");
    			scanf("%s", p->data.addr);
    			printf(" 请输入新职工电话: ");
    			scanf("%s", p->data.tel);
    			printf(" \n提示:该职工资料已经修改!\n ");
    		}
    	}
    	else 
    		printf("\n提示:没有你要修改的资料!\n ");
    }
     
     
    //输出职工信息函数
    int  Display(Node *worker)
    {
    	Node *p;
    	p = worker->next;
    	if (p == NULL)
    	{
    		printf(" \n提示:没有信息可以显示!\n ");
    		return 0;
     
    	}
    	printf("\t\t\t\t显示结果\n");
    	printf(" \n职工号   姓名	性别	出生年月    学历	职务	工资	住址	电话	\n ");
    	while (p!=NULL)  
    	{
    		printf("\n %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t\n ", p->data.jobNo, p->data.name,
    			p->data.sex, p->data.birthday, p->data.degree, p->data.position,
    			p->data.salary, p->data.addr, p->data.tel);
    		p = p->next;
     
    	}
     
    }
     
     
    //查询职工信息函数: 按职工号查询	按职工姓名查询
    int  Search(Node *worker)
    {
    	Node *p;
    	int sel;
    	char find[20];	
    	p = worker->next;   
     
    	if (p==NULL) 
    	{
    		printf(" \n提示:没有资料可以查询!\n ");
    		return 0;
     
    	}
     
    	printf("\n提示:\n 输入 0---- 退出\t 输入 1----按职工号查询\t 输入 2-----按职工姓名查询\n");
    	printf("请选择:");
    	scanf("%d", &sel);
     
    	if (sel == 1)
    	{
    		printf("\n请输入你要查询分类的职工号:");
    		scanf("%s", find);
    		while (p!=NULL)  
    		{
    			if (strcmp(p->data.jobNo, find) == 0)
    			{
    				printf(" 职工号	  姓名  	性别	出生年月	学历	职务	工资	住址	电话 \n ");
    				printf(" \n %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t\n ", p->data.jobNo, p->data.name,
    					p->data.sex, p->data.birthday, p->data.degree, p->data.position,
    					p->data.salary, p->data.addr, p->data.tel);
     
    			}
    			p = p->next;   
     
    		}
     
    	}
     
    	else if (sel == 2)
    	{
    		printf(" \n输入你要查询分类的职工姓名:");
    		scanf("%s", find);
    		while (p!=NULL)
    		{
    			if (strcmp(p->data.name, find) == 0) 
    			{
    				printf(" 职工号		姓名	性别	出生年月	学历	职务	工资	住址	电话 \n ");
    				printf(" \n %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t \n ", p->data.jobNo, p->data.name,
    					p->data.sex, p->data.birthday, p->data.degree, p->data.position,
    					p->data.salary, p->data.addr, p->data.tel);
     
    			}
    			p = p->next;
     
    		}
    	}
    	
    	else if (sel == 0)
    		return 0;
    		
    }
     
     
    //删除职工信息函数
    void  Del(Node *worker)
    {
    	Node *p, *r;
    	char find[10];
    	p = worker->next;
    	if (p == NULL)
    	{
    		printf("提示:没有职工信息可以删除!\n ");
    		return 0;
     
    	}
    	printf(" \n提示:请输入你要删除的职工号!\n ");
    	scanf("%s", find);
    	while (p != NULL)
    	{
    		if (strcmp(p->data.jobNo, find) == 0)
    		{
    			break;
    		}
    		p = p->next;
     
    	}
     
    	if (p!=NULL)
    	{
    		r = worker;
    		while (r->next != p)
    		{
    			r = r->next;
    		}
    		r->next = r->next->next;    
    	}
    }
     
     
    //将职工信息保存到文件中
    void save(Node *worker)
    {
    	int n;
    	Node *p = NULL;
    	FILE *fp;    
    	printf("是否保存到文件?( 1-----保存!,0-----不保存! )");
    	scanf("%d", &n);
     
    	if (n == 1)
    	{
    		if (worker->next == NULL)
    		{
    			printf(" 没有记录!");
    		}
     
    		else
    		{
    			p = worker->next;
    		}
     
    		if ((fp = fopen("职工信息管理系统.txt", " wb ")) == NULL)  
    		{
    			printf(" 文件不能打开!\n");     
    		}
     
    		while (p != NULL)   
    		{
    			fprintf(fp, "%s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t", p->data.jobNo, p->data.name, p->data.sex,
    				p->data.birthday, p->data.degree, p->data.position, p->data.salary,
    				p->data.addr, p->data.tel);        
    			p = p->next; 
     
    		}
    		fclose(fp);  
     
    	}
     
    }
     
     
    //读取职工信息 
    void Read(Node *worker)
    {
    	Node *p;
    	FILE *fp; 
     
    	if ((fp = fopen("职工信息管理系统.txt", "rb")) == NULL)     
    	{
    		printf("文件不能打开!\n ");
    	}
    	
    	p = worker->next;
    	while (p!=NULL)
    	{
    		fscanf(fp, " %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t ", p->data.jobNo, p->data.name, p->data.sex,
    			p->data.birthday, p->data.degree, p->data.position, p->data.salary,
    			p->data.addr, p->data.tel);     
    		p=p->next;
     
    	}
    	fclose(fp);
     
    }
     
     
    //主函数实现 
    int main()
    {
    	Node *worker;
    	int flag;
    	
    	worker = (Node*)malloc(sizeof(Node));
    	worker->next = NULL; 
    	
     	while(1)
     	{
     			printf("\t职 工 信 息 管 理 系 统\n");
    			printf("==================菜 单==================\n ");
    			printf("1.输入职工信息\n ");
    			printf("2.修改职工信息\n ");
    			printf("3.浏览职工信息\n ");
    			printf("4.查询职工信息\n ");
    			printf("5.删除职工信息\n ");
    			printf("6.读取职工信息\n ");
    			printf("0.退出\n ");
     
    			printf("输入你选择的序号:");
    			scanf("%d", &flag);
    			switch (flag)
    			{
    				case 0:  printf(" \n提示:退出系统!\n ");  break;
    				case 1:	 Add(worker); save(worker);  break;    //添加职工信息,保存到文件中 
    				case 2:  Modify(worker);  break;           //修改职工信息 
    				case 3:  Display(worker);  break;             //显示职工信息 
    				case 4:  Search(worker);  break;           //查询职工信息 
    				case 5:  Del(worker);  break;          //删除职工信息 
    				case 6:  Read(worker);  break;             //读取职工信息 
    				default: printf("提示:输入错误!\n ");
    			}
    	}
    	
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal