提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
这里是学生管理系统的一些小模块的实现:
提示:以下是本篇文章正文内容,下面案例可供参考
注册模块应该怎样写呢?
1.首先需要创建一个文件来保存已经注册了的账号及密码,这样就不需要每次登录时都重新注册,只需要登录的时候在文件中查看这个账号是否存在
2.然后我们需要判断每次输入的账号是否合法。(指输入的学生学号是否真实存在)这时候我们也需要一个文件,来存储所有可以用来注册的学生信息。
所以我们需要判断用户输入的账号是否对应真实存在的学生,并且这个账号未被注册,还需要在注册成功后对账号及密码进行保存。
void zhuce() {//这里是注册模块
Sleep(1000);
system("cls");
//注册账号
printf("请输入账号:");
char num[NUM_S];
scanf("%s", num);
Node* head = (Node*)malloc(sizeof(Node));
head = duqu_class1();//这里是去寻找账号是否合法
int k = -1;
while (head) {
if (strcmp(head->num, num) == 0) {
k = 0;
break;
} else {
k = 1;
head = head->next;
}
}
if (k == 1) {
printf("没有找到你的账号,请重新输入!\n");
zhuce();
}
struct count* count = (struct count*)malloc(sizeof(count));
count = duqu_count();//判断输入的账号是不是已经被注册
while (count) {
if (strcmp(count->num, num) == 0) {
printf("此账号已被注册,请重新输入:\n");
zhuce();
break;
} else {
k = 2;
count = count->next;
}
}
char password1[PASS_S];//当账号合法且未被注册时会来到这一步
char password2[PASS_S];//我们需要让用户输入两次密码,达到确定密码的目的
if (k == 2) {
printf("请输入密码:");
scanf("%s", password1);
printf("请确认密码:");
scanf("%s", password2);
if (strcmp(password1, password2) == 0) {
//这里不能直接比较password1和password2,因为他们都是字符串类型,变量名应该为字符串地址
printf("注册成功!\n");
struct count* Head = (struct count*)malloc(sizeof(struct count));
struct count* p = Head;
strcpy(Head->num, num);
strcpy(Head->password, password1);
//需要注意这里不能直接让Head->password=password
//password是一个字符串,应该使用strcpy函数将它复制过来,原因和上边的strcmp函数相同
save_count(Head);//对已经成功注册的账号,应该保存至账号文件内
Head->next = NULL;
Head = Head->next;
}
} else {//当两次输入的密码不一致时,会提示用户输入的密码不一致,然后重新来到注册页面
printf("两次输入的密码不一致!请重新输入:\n");
zhuce();
}
}
文件中的信息的读取(需要存在一个名为class1.txt的文件),对这个文件进行读取
Node* duqu_class1() {//将文件中的信息读取到链表里
Sleep(1000);
system("cls");
FILE* fp;
fp = fopen("class1.txt", "r");
Node* head, * p, * end;
head = p = (Node*)malloc(sizeof(Node));
while (!feof(fp)) {
end = (Node*)malloc(sizeof(Node));
fscanf(fp, "%s %s %s %d %d %d\n", end->name, end->num, end->class, &end->score1, &end->score2, &end->score3);
p->next = end;
p = end;
}
fclose(fp);
head = head->next;
p->next = NULL;
return head;
}
这里是判断读取的账号是否已经被注册的函数,需要注意这里函数的返回类型(count.txt)是用来存储所有已经注册过的账号和密码的文件
struct count* duqu_count() {
Sleep(1000);
system("cls");
FILE* fp = fopen("count.txt", "r");
if (fp == NULL) {
perror(fopen);
return;
}
struct count* Head, * p, * end;
Head = p = (struct count*)malloc(sizeof(struct count));
while (!feof(fp)) {
end = (struct count*)malloc(sizeof(struct count));
fscanf(fp, "%s %s\n", end->num, end->password);
p->next = end;
p = end;
}
fclose(fp);
Head = Head->next;
p->next = NULL;
return Head;
}
这里是对注册成功的账号及密码的保存函数,我们依然把注册成功的账号及密码保存至count.txt文件中
void save_count(struct count* head) {//将注册过的账号保存起来
Sleep(1000);
system("cls");
struct count* con = (struct count*)malloc(sizeof(struct count));
FILE* fp;
fp = fopen("count.txt", "a");
if (fp == NULL) {
perror(fopen);
} else {
con = head;
struct count* Headcount = con;
fprintf(fp, "%s %s\n", con->num, con->password);
con = con->next;
printf("账号密码已成功保存!\n");
fclose(fp);
}
}
在用户输入时,我们只需读取之前的存储账号及密码的文件,看用户输入的账号及密码是否正确即可。
void denglu_stu() {//登录学生账户
Sleep(1000);
system("cls");
char num[NUM_S];
printf("请输入账号:");
scanf("%s", num);
char password[PASS_S];
printf("请输入密码:");
scanf("%s", password);
int i = 0;
struct count* Head = duqu_count();
//此函数在前面已经声明过,不做过多解释
while (Head) {
if (strcmp(Head->num, num) == 0 && strcmp(Head->password, password) == 0) {
printf("登录成功!\n");
menu_stu();
i = 1;
break;
} else {
Head = Head->next;
}
}
if (i != 1) {
printf("输入的学号或密码有误,或此学号还未注册!\n");
}
}
struct student* Head=NULL;
Head = duqu_class1();
//依然是之前的读取学生信息的函数
char num[NUM_S];
printf("请输入你的学号:\n");
scanf("%s", num);
int i = 0;
while (Head) {
if (strcmp(Head->num, num) == 0) {
printf("%d %d %d", Head->score1, Head->score2, Head->score3);
i = 1;
break;
} else {
Head = Head->next;
}
}
if (i != 1) {
printf("输入的学号有误,请重新输入!\n");
chaxun(k);
}
struct student* Head=NULL;
Head = duqu_class1();
while (Head) {
printf("%5s %5s %5s %5d %5d %5d\n", Head->name, Head->num, Head->class, Head->score1, Head->score2, Head->score3);
Head = Head->next;
}
在学生管理系统的注册,登陆等模块中,要注意这块我们需要对文件进行操作。一定一定注意文件的打开方式,否则你可能在操作完成后会发现自己又得到了一个空文件。