⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 通讯录.c

📁 这个代码是用C语言编写的
💻 C
📖 第 1 页 / 共 2 页
字号:
		system("pause");
		exit (0);
	}
}

/*
 *Function: GiveInstruction
 *Usage: GiveInstruction(db->matesnum, string);
 *--------------------------------------
 *这个函数给出关于本程序和记录文件的一些信息
 */

void GiveInstruction(int num, char *filename)
{
	printf("**********************************************\n");
	printf("        欢迎使用通讯录记录程序!\n\n\n");
	printf("本通讯录目前可存储记录总数为%d条。\n", MaxElement);
	printf("目前%s中已有%d条记录。通讯录修改之后请注意随时保存。\n", filename, num);
	printf("本通讯录的记录从0开始编码,即第一条记录的编号为0,请注意。\n\n");
	printf("请选择你要做的工作:\n");
	printf("1.增加记录.\n");
	printf("2.删除记录.\n");
	printf("3.查找记录.\n");
	printf("4.显示记录.\n");
	printf("5.修改记录.\n");
	printf("6.记录重新排序.\n");
	printf("7.保存记录.\n");
	printf("8.重命名文件.\n");
	printf("9.退出程序.\n");
	printf("**********************************************\n");
}

/*
 *Function: DeleteRecord
 *Usage: DeleteRecord(db);
 *-----------------------------------
 *这个函数提供了删除某条记录、删除部分记录和删除所有记录
 *三项功能。当用户选择某项功能时,对应的记录指针会从数组
 *中被删除,并相应地修改剩余记录的指针及编号。当删除完成
 *后,用户使用保存记录功能时,删除后的记录数组的信息会写
 *入新文件中,从而达到删除的目的。
 */

void DeleteRecord(records db)
{
	int n, i, answer, start, end;

	if(!db->matesnum){    //如果文件中尚无记录
		printf("当前文件中没有记录,无法使用删除功能。\n");
		return;
	}
	printf("目前菜单:删除记录。确定删除请输入1,返回上一级菜单请输入0:");
	while(true){
		scanf("%d", &answer);
		getchar();
		if(answer == 0 || answer == 1) break;
		printf("输入错误!请重新输入:");
	}
	if(!answer) return;
	printf("删除某条记录请输入0,删除部分记录请输入1,删除所有记录请输入2:");
	while(true){
		scanf("%d", &answer);
		getchar();
		if(answer == 0 || answer == 1 || answer == 2) break;
		printf("输入错误!请重新输入:");
	}
	if(!answer){
		printf("要删除哪条记录(如须查找记录请输入-1)?");
		while(true){
			scanf("%d", &n);
			getchar();
			if((n < db->matesnum && n >= 0) || n == -1) break;
			printf("输入错误或没有此条记录!请重新输入:");
		}
		if(n == -1){
			SearchRecord(db);
			DeleteRecord(db);
		}else{
			printf("该条记录的内容如下:\n");
			printf("%-4d.%-6s  %-7s  %-8s  %-11s  %-11s  %-20s\n", db->classmates[n]->n,db->classmates[n]->name,db->classmates[n]->number,db->classmates[n]->flatnum, db->classmates[n]->cellphone, db->classmates[n]->qqnum,db->classmates[n]->address);
			printf("确定删除该记录?(是 1/否 0)");
			while(true){
				scanf("%d", &answer);
				getchar();
				if(answer == 0 || answer == 1) break;
				printf("输入错误!请重新输入:");
			}
			if(answer){
				for(i = n; i < db->matesnum - 1; i++){      //将记录顺序前移
					db->classmates[i + 1]->n--;
					db->classmates[i] = db->classmates[i + 1];
				}
				db->matesnum--;
				printf("删除记录成功。\n");
			}
		}
	}else if(answer == 1){
		printf("请输入删除范围:\n");
		while(true){
			printf("请输入起始标号:");
			scanf("%d", &start);
			getchar();
			printf("请输入终止标号:");
			scanf("%d", &end);
			getchar();
			if(start <= end && end < db->matesnum) break;
			printf("指令错误!请重新输入\n");
		}
		printf("将要删除从%d到%d共%d条记录,确定删除?(是 1/否 0)", start, end, end - start + 1);
		while(true){
				scanf("%d", &answer);
				getchar();
				if(answer == 0 || answer == 1) break;
				printf("输入错误!请重新输入:");
		}
		if(answer){
			for(i = end + 1; i < db->matesnum; i++){
				db->classmates[i]->n -= end - start + 1;
				db->classmates[i - end + start -1] = db->classmates[i];      //指针前移,跳过中间要删除的部分记录
			}
			db->matesnum -= end - start + 1;
		}
		printf("删除记录成功。\n");
	}else{
		db->matesnum = 0;     //删除所有记录,故令记录的数目为0
	}
	if(db->matesnum){        //当文件中还有记录时
		printf("继续删除(是 1/否 0)?");
		while(1){
			scanf("%d", &answer);
			getchar();
			if(answer == 0 || answer == 1) break;
			printf("输入错误!请重新输入:");
		}
		if(answer) DeleteRecord(db);
	}
}

/*
 *Function: ChangeRecord
 *Usage: ChangeRecord(db);
 *-----------------------------
 *这个函数用于修改记录的内容
 */

void ChangeRecord(records db)
{
	int n, answer;

	if(!db->matesnum){    //如果文件中尚无记录
		printf("当前文件中没有记录,无法使用修改功能。\n");
		return;
	}
	printf("目前菜单: 修改记录。确定修改请输入1,返回上一级菜单请输入0:");
	while(true){
		scanf("%d", &answer);
		getchar();
		if(answer == 0 || answer == 1) break;
		printf("输入错误!请重新输入:");
	}
	if(!answer) return;
	printf("要修改哪一条记录?(如须查找记录请输入-1)");
	while(true){
		scanf("%d", &n);
		getchar();
		if((n <= db->matesnum && n >= 0) || n == -1) break;
		printf("输入错误或没有此条记录!请重新输入:");
	}
	if(n == -1){
		SearchRecord(db);
		ChangeRecord(db);
	}else{
		printf("原记录的内容为:\n");
		printf("%-4d.%-6s  %-7s  %-8s  %-11s  %-11s  %-20s\n", db->classmates[n]->n,db->classmates[n]->name,db->classmates[n]->number,db->classmates[n]->flatnum, db->classmates[n]->cellphone, db->classmates[n]->qqnum,db->classmates[n]->address);
		printf("确定修改该记录?(是 1/否 0)");
		while(true){
			scanf("%d", &answer);
			getchar();
			if(answer == 0 || answer == 1) break;
			printf("输入错误!请重新输入:");
		}
		if(answer){
			printf("请选择修改项目:\n");
			printf("1.姓名 2.学号 3.宿舍 4.手机 5.QQ 6.地址 7.全部:");
			while(true){
				scanf("%d", &answer);
				getchar();
				if(answer == 1 || answer == 2 || answer == 3 || answer == 4 || answer == 5 || answer == 6 || answer == 7) break;
				printf("输入错误!请重新输入:");
			}
			switch(answer){
				case 1:
					printf("请输入姓名:");
					scanf("%6s", db->classmates[n]->name);
					getchar();
					break;
				case 2:
					printf("请输入学号:");
					scanf("%7s", db->classmates[n]->number);
					getchar();
					break;
				case 3:
					printf("请输入宿舍:");
					scanf("%8s", db->classmates[n]->flatnum);
					getchar();
					break;
				case 4:
					printf("请输入手机:");
					scanf("%11s", db->classmates[n]->cellphone);
					getchar();
					break;
				case 5:
					printf("请输入QQ号:");
					scanf("%11s", db->classmates[n]->qqnum);
					getchar();
					break;
				case 6:
					printf("请输入地址:");
					scanf("%20s", db->classmates[n]->address);
				default:
					db->classmates[n] = AddToRecord(db->classmates[n]->n);
					break;
			}
		}
		printf("是否继续修改下一条(是 1/否 0)?");
		while(true){
			scanf("%d", &answer);
			getchar();
			if(answer == 0 || answer == 1) break;
			printf("输入错误!请重新输入:");
		}
		if(answer) ChangeRecord(db);
	}
}

/*
 *Function: SearchRecord
 *Usage: SearchRecord(db);
 *---------------------------
 *这个函数用于在文件中查找记录
 *如果查找到符合条件的记录,函数会将其全部显示在屏幕上
 *否则给出查找不得的信息。
 */

void SearchRecord(records db)
{
	int answer, i, j = 0, nscan = 0;
	char *search;

	if(!db->matesnum){    //如果文件中尚无记录
		printf("当前文件中没有记录,无法使用查找功能。\n");
		return;
	}
	printf("目前菜单:查找记录。请输入要查找内容的代号。\n");
	printf("1.姓名 2.学号 3.宿舍 4.手机 5.QQ 6.地址 0.返回上一级菜单:");
	while(true){
		scanf("%d", &answer);
		getchar();
		if(answer == 1 || answer == 2 || answer == 3 || answer == 4 || answer == 5 || answer == 6|| answer == 0) break;
		printf("输入错误!请重新输入:");
	}
	if(!answer) return;
	search = (char *)GetBlock(Namelength * sizeof(char));
	printf("请输入查找内容:");
	scanf("%s", search);
	getchar();
	switch(answer){
		case 1:
			for(i = 0; i < db->matesnum; i++){
				if(!strcmp(search, db->classmates[i]->name)){     //如果内容匹配,strcmp函数返回0,此时if语句执行
					nscan += printf("%-4d.%-6s  %-7s  %-8s  %-11s  %-11s  %-20s\n", db->classmates[i]->n,db->classmates[i]->name,db->classmates[i]->number,db->classmates[i]->flatnum, db->classmates[i]->cellphone, db->classmates[i]->qqnum,db->classmates[i]->address);
					j++;
				}
			}
			if(nscan == 0){
				printf("没有找到记录,可能是您的输入有误,请重新尝试。\n");
			}else{
				printf("共有%d条记录符合条件。\n", j);
			}
			break;
		case 2:
			for(i = 0; i < db->matesnum; i++){
				if(!strcmp(search, db->classmates[i]->number)){
					nscan += printf("%-4d.%-6s  %-7s  %-8s  %-11s  %-11s  %-20s\n", db->classmates[i]->n,db->classmates[i]->name,db->classmates[i]->number,db->classmates[i]->flatnum, db->classmates[i]->cellphone, db->classmates[i]->qqnum,db->classmates[i]->address);
					j++;
				}
			}
			if(nscan == 0){
				printf("没有找到记录,可能是您的输入有误,请重新尝试。\n");
			}else{
				printf("共有%d条记录符合条件。\n", j);
			}
			break;
		case 3:
			for(i = 0; i < db->matesnum; i++){
				if(!strcmp(search, db->classmates[i]->flatnum)){
					nscan += printf("%-4d.%-6s  %-7s  %-8s  %-11s  %-11s  %-20s\n", db->classmates[i]->n,db->classmates[i]->name,db->classmates[i]->number,db->classmates[i]->flatnum, db->classmates[i]->cellphone, db->classmates[i]->qqnum,db->classmates[i]->address);
					j++;
				}
			}
			if(nscan == 0){
				printf("没有找到记录,可能是您的输入有误,请重新尝试。\n");
			}else{
				printf("共有%d条记录符合条件。\n", j);
			}
			break;
		case 4:
			for(i = 0; i < db->matesnum; i++){
				if(!strcmp(search, db->classmates[i]->cellphone)){
					nscan += printf("%-4d.%-6s  %-7s  %-8s  %-11s  %-11s  %-20s\n", db->classmates[i]->n,db->classmates[i]->name,db->classmates[i]->number,db->classmates[i]->flatnum, db->classmates[i]->cellphone, db->classmates[i]->qqnum,db->classmates[i]->address);
					j++;
				}
			}
			if(nscan == 0){
				printf("没有找到记录,可能是您的输入有误,请重新尝试。\n");
			}else{
				printf("共有%d条记录符合条件。\n", j);
			}
			break;
		case 5:
			for(i = 0; i < db->matesnum; i++){
				if(!strcmp(search, db->classmates[i]->qqnum)){
					nscan += printf("%-4d.%-6s  %-7s  %-8s  %-11s  %-11s  %-20s\n", db->classmates[i]->n,db->classmates[i]->name,db->classmates[i]->number,db->classmates[i]->flatnum, db->classmates[i]->cellphone, db->classmates[i]->qqnum,db->classmates[i]->address);
					j++;
				}
			}
			if(nscan == 0){
				printf("没有找到记录,可能是您的输入有误,请重新尝试。\n");
			}else{
				printf("共有%d条记录符合条件。\n", j);
			}
			break;
		case 6:
			for(i = 0; i < db->matesnum; i++){
				if(!strcmp(search, db->classmates[i]->address)){
					nscan += printf("%-4d.%-6s  %-7s  %-8s  %-11s  %-11s  %-20s\n", db->classmates[i]->n,db->classmates[i]->name,db->classmates[i]->number,db->classmates[i]->flatnum, db->classmates[i]->cellphone, db->classmates[i]->qqnum,db->classmates[i]->address);
					j++;
				}
			}
			if(nscan == 0){
				printf("没有找到记录,可能是您的输入有误,请重新尝试。\n");
			}else{
				printf("共有%d条记录符合条件。\n", j);
			}
			break;
		default :
			printf("运行时错误!");
			system ("pause");
			exit(1);
	}
}

/*
 *Function: RangeRecord
 *Usage: RangeRecord(db);
 *-----------------------------
 *该函数用于将记录按某个标准重新排序
 *排序过程使用的是冒泡排序法,将记录
 *的指针和编号一起交换,从而排序。
 */

void RangeRecord(records db)
{
	int answer, i, j, n1;
	oneRecord temp;

	if(!db->matesnum){    //如果文件中尚无记录
		printf("当前文件中没有记录,无法使用排序功能。\n");
		return;
	}
	printf("目前菜单: 记录重新排序。确定排序请输入1, 返回上一级菜单请输入0:");
	while(true){
		scanf("%d", &answer);
		getchar();
		if(answer == 0 || answer == 1) break;
		printf("输入错误!请重新输入:");
	}
	printf("请选择排序依据。0.姓名 1.学号 2.返回上一级菜单:");
	while(true){
		scanf("%d", &answer);
		getchar();
		if(answer == 0 || answer == 1 || answer == 2) break;
		printf("输入错误!请重新输入:");
	}
	if(answer == 2) return;
	if(!answer){
		for(i = 0; i < db->matesnum - 1; i++){
			for(j = i + 1; j < db->matesnum; j++){
				if(strcmp(db->classmates[i]->name, db->classmates[j]->name) > 0){
					n1 = db->classmates[i]->n;
					db->classmates[i]->n = db->classmates[j]->n;
					db->classmates[j]->n = n1;
					temp = db->classmates[i];
					db->classmates[i] = db->classmates[j];
					db->classmates[j] = temp;
				}
			}
		}
	}else{
		for(i = 0; i < db->matesnum - 1; i++){
			for(j = i + 1; j < db->matesnum; j++){
				if(strcmp(db->classmates[i]->number, db->classmates[j]->number) > 0){
					n1 = db->classmates[i]->n;
					db->classmates[i]->n = db->classmates[j]->n;
					db->classmates[j]->n = n1;
					temp = db->classmates[i];
					db->classmates[i] = db->classmates[j];
					db->classmates[j] = temp;
				}
			}
		}
	}
	printf("排序完成。\n");
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -