C语言联系人管理系统代码优化建议

以下是对给定代码的优化建议,旨在提高代码的质量和可读性。

1. 结构体U和结构体bir没有被使用,可以删除。

在代码中,结构体U和bir并没有被实际使用,因此可以删除这两个结构体。

2. 在load函数中,读取用户信息的时候,最后一个用户信息并不需要赋值给u[i],因为循环已经结束了,可以直接在循环外关闭文件。

在load函数中,循环读取用户信息时,最后一个用户信息不需要再赋值给u[i],可以直接在循环结束后关闭文件。

3. 在load函数中,当用户输入用户名和密码后,如果不匹配,则需要清除输入缓冲区中的多余字符,可以使用fflush(stdin)来清除。

在load函数中,当用户输入用户名和密码后,如果不匹配,需要使用fflush(stdin)清除输入缓冲区中的多余字符,防止影响后续的输入操作。

4. 在readFile函数中,读取电话号码的时候应该用%s来读取,而不是%d,因为电话号码中可能包含‘-’或‘+’等字符。

在readFile函数中,读取电话号码时应该使用%s,而不是%d,因为电话号码可能包含‘-’或‘+’等字符。

5. 在readFile函数中,读取出生日期的时候,年、月、日之间应该用‘-’隔开,而不是用空格隔开。

在readFile函数中,读取出生日期时,年、月、日之间应该使用-隔开,而不是空格隔开,以符合常见的日期格式。

以下是代码优化后的示例,包含了上述所有优化建议:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct {
	char name[20];
	char secret[20];
} user;

struct con {
	char name[20];
	char sex;
	char add[20];
	char tel[13];
	int year, month, day;
};

int load();
void menu();
int readFile(struct con con[]);

int main() {
	int f = load(), n = 0;
	if (f == 0) {
		return 0;
	}
	struct con con[200];
	int choice;
	while (1) {
		system("pause");
		system("cls");
		menu();
		printf("请选择(1-4):");
		scanf("%d", &choice);
		switch (choice) {
		case 1:
			n = readFile(con);
			printf("%d", n);
			break;
		case 2:
			break;
		case 3:
			break;
		case 4:
			break;
		default:
			break;
		}
	}
	return 0;
}

int load() {
	FILE *fp;
	user u[10], ut;
	int i = 0, n = 0;
	char yn;
	fp = fopen("user.txt", "r");
	if (fp != NULL) {
		fscanf(fp, "%s %s", ut.name, ut.secret);
		while (!feof(fp)) {
			u[i] = ut;
			i++;
			fscanf(fp, "%s %s", ut.name, ut.secret);
		}
		fclose(fp);
	}
	printf("输入用户名和密码:");
	scanf("%s %s", ut.name, ut.secret);
	for (i = 0; i < n; i++) {
		if (strcmp(ut.name, u[i].name) == 0 && strcmp(ut.secret, u[i].secret) == 0) {
			return 1;
		}
	}
	fflush(stdin);
	printf("用户名或密码错,注册吗(y/n):");
	yn = getchar();
	if (yn == 'y') {
		printf("输入注册用户名和密码:");
		scanf("%s %s", ut.name, ut.secret);
		u[n++] = ut;
		fp = fopen("user.txt", "a");
		if (fp != NULL) {
			fprintf(fp, "%s %s\n", ut.name, ut.secret);
			fclose(fp);
		}
		printf("重新登录!\n");
		printf("输入用户名和密码:");
		scanf("%s %s", ut.name, ut.secret);
		if (strcmp(ut.name, u[n - 1].name) == 0 && strcmp(ut.secret, u[n - 1].secret) == 0) {
			return 1;
		} else {
			return 0;
		}
	} else {
		return 0;
	}
}

void menu() {
	printf("-------主菜单------------\n");
	printf("--- 1 新增联系人     ----\n");
	printf("--- 2 查找联系人信息 ----\n");
	printf("--- 3 删除联系人信息 ----\n");
	printf("--- 4 编辑联系人信息 ----\n");
	printf("--- 其他,退出系统   ----\n");
}

int readFile(struct con con[]) {
	int i = 0;
	FILE *fl;
	fl = fopen("test.txt", "r");
	if (fl != NULL) {
		fscanf(fl, "%s %c %s %s %d-%d-%d", con[i].name, &con[i].sex, con[i].add, con[i].tel, &con[i].year, &con[i].month, &con[i].day);
		while (!feof(fl)) {
			i++;
			fscanf(fl, "%s %c %s %s %d-%d-%d", con[i].name, &con[i].sex, con[i].add, con[i].tel, &con[i].year, &con[i].month, &con[i].day);
		}
		fclose(fl);
	}
	return i;
}

通过以上优化建议,可以使代码更简洁、易读,并且能够避免潜在的错误。 同时,建议使用代码格式化工具来整理代码,使其更易于阅读和维护。

C语言联系人管理系统代码优化建议

原文地址: https://www.cveoy.top/t/topic/n46g 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录