C语言ll作业01

这个作业属于哪个课程 班级链接
这个作业的要求 作业链接
这个作业的目标 要求编写一个五十人的通讯录
参考文献 学长制作的演示视频

需求分析

·要求编写一个五十人的通讯录
·每个人信息包括姓名和电话
·使用前面几次作业的菜单框架
·使用数组,包括二维数组和字符数组
·极高的容错率

程序代码

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct tel_book{
	int num;
	char name[10];
	char tel[20];
};
struct tel_book a[50];
static int count=0,sum=50;
void menu();
void show();
void rank();
void add();
void remove();
void change();
int search(int x);
void *search();
int main(int arg,char const*argc[]){
	menu();
}
void menu(){
	int n;
	while(1){
		show();
		printf("操作列表:\n");
		printf("1)排序   2)添加   3)删除\n4)修改   5)查找   6)退出程序\n");
		printf("请输入操作:");
		scanf("%d",&n);
		putchar('\n');    
		putchar('\n');   
		switch(n){
			case 1: rank();system("cls");break;
			case 2: add();system("cls");break;
			case 3: remove();system("cls");break;
			case 4: change();system("cls");break;
			case 5: search();system("cls");break;
			case 6: exit(0);break;
			default: printf("error!!!\n错误操作指令,请重新输入\n");break; 
		}
	}
}
void show(){
	printf("========== 通讯录 ==========\n\n\n");
	printf("========== 界面 ==========\n");
	printf("人数:%d   |剩余空间:%d\n",count,sum);
	for(int i=0;i<count;i++){
		printf("编号:%d   |姓名:%s   |电话:%s\n",a[i].num,a[i].name,a[i].tel);
	}
	printf("\n\n\n");
}
void rank(){
	int m;
	struct tel_book t;
	printf("请选择排序方式\n");
	printf("1)编号排序   2)姓名排序\n你选择:");
	scanf("%d",&m);
	switch(m){
		case 1: for(int i=1;i<count;i++){
		            for(int j=0;j<count-i;j++){
		            	if(a[j].num>a[j+1].num){
		            		t=a[j];a[j]=a[j+1];a[j+1]=t;
						}
					}
			    } break;
		case 2: for(int i=1;i<count;i++){
		            for(int j=0;j<count-i;j++){
		            	if(strcmp(a[j].name,a[j+1].name)>0){
		            		t=a[j];a[j]=a[j+1];a[j+1]=t;
						}
					}
		        } break;
		default: printf("错误操作,请重新输入");
		         getchar();
				 system("cls");   
				 break; 
	}
}
void add(){
	if(sum==0){
		printf("\n通讯录已满\n");
		system("pause");   
	}
	printf("添加操作:\n");
	printf("请输入添加位置:");
	scanf("%d",&a[count].num);
	if(a[count].num<1||a[count].num>50){
		printf("处理编号超过阀值\n");
		system("pause"); 
	}
	for(int i=0;i<count;i++){
		if(a[i].num==a[count].num){
			printf("此处存在数据");
			system("pause"); 
		}
	}
	printf("请输入联系人姓名:");
	scanf("%s",a[count].name);
	printf("请输入联系人电话:");
	scanf("%s",a[count].tel);
	count++;sum--; 
}
void remove(){
	int x,y;
	printf("删除操作:\n");
	printf("请输入操作位置:");
	scanf("%d",&x);
	if(x<1||x>50){
		printf("处理编号超过阀值");
		system("pause");
	}
	y=search(x);
	if(y==-1){
		printf("此处无数据\n");
		system("pause");
	}
	else{
		for(int i=y;i<count;i++){
			a[i-1]=a[i];
		}
		count--;sum++;
	}
}
void change(){
	int x,y;
	char *o=NULL,*p=NULL;
	printf("修改操作:\n");
	printf("请输入操作位置:");
	scanf("%d",&x);
	if(x>50||x<1){
		printf("处理编号超过阀值\n");
		system("pause"); 
	}
	y=search(x);
	if(y==-1){
		printf("此处无数据\n");
		system("pause");
	}
	else{
		o=a[y-1].name;
		p=a[y-1].tel;
		printf("已删除,请重新输入:\n");
		printf("请输入联系人姓名:");
		scanf("%s",o);
		printf("请输入联系人电话:");
		scanf("%s",p);
	}
}
int search(int x){
	for(int i=0;i<count;i++){
		if(a[i].num==x){
			return i+1;
		}
	}
	return -1;
}
void *search(){
	int min=0,max=count-1,x;
	char b[40];  
	printf("请输入查询联系人姓名或电话:");
	scanf("%s",&b);
	if(b[0]>='1'&&b[0]<='9'){
		for(int i=0;i<count;i++){
			if(strcmp(b,a[i].tel)==0){
				printf("编号:%d   |姓名:%s   |电话:%s\n",a[i].num,a[i].name,a[i].tel);
				system("pause");
				return 0;
			}
		}
		printf("\n查无此人\n");
		system("pause");
	}
	else{
		for(int i=0;i<50;i++){
			if(strcmp(a[i].name,b)==0){
				getchar();
				printf("编号:%d   |姓名:%s   |电话:%s\n",a[i].num,a[i].name,a[i].tel);
				system("pause");
				return 0;
			}
		}
		printf("\n查无此人\n");
		system("pause");
	}
}

源代码








函数调用图与流程图

功能测试










应用集成

gitee上传失败,太久没用了。
码云主页

posted @ 2020-04-27 19:00  红蓼  阅读(257)  评论(0)    收藏  举报