C语言联系人管理系统代码优化建议
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;
}
通过以上优化建议,可以使代码更简洁、易读,并且能够避免潜在的错误。 同时,建议使用代码格式化工具来整理代码,使其更易于阅读和维护。
原文地址: https://www.cveoy.top/t/topic/n46g 著作权归作者所有。请勿转载和采集!