使用C语言编写一个登录“教务系统”的小程序。功能包括:刚进入系统时要求先注册,注册信息包括用户名(由字母组成)、密码与学号,注册后再转登录,登录时判断用户名与密码是否一致,一致提示登录成功,登录成功界面显示改学生的用户名与学号 并显示以下几个功能: 1)你说我猜游戏:让计算机随机生产一个数,我们不知道是哪个数(1-100),每次你输入一个数,与计算机产生的数比较,若你输入的数比较小,提示“你输入的数偏小,请再猜”,反之也一样。通过计算机每次的偏大或者偏小提示,最终猜到计算机随机生成的那位数。并计算你猜的次数。 2)计算平均成绩:输入5个学生的成绩,并计算得到他们的平均成绩。用数组实现。 以上两个小功能用独立的函数完成,在main函数中调用。 若不一致要求重新登录。连续输入三次错误,提示您的账号已被冻结。
时间: 2024-02-16 17:05:00 浏览: 76
好的,以下是程序代码,注意输入的用户名不能包含数字或其他特殊字符,密码长度最好不少于6位:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX_STUDENT 5 // 最大学生数
#define MAX_NAME_LENGTH 20 // 最大用户名长度
#define MAX_PASSWORD_LENGTH 20 // 最大密码长度
// 学生结构体
struct Student {
char name[MAX_NAME_LENGTH];
char password[MAX_PASSWORD_LENGTH];
char student_id[10];
int grade[5];
float avg_grade;
};
int login(struct Student *students, int student_num);
void register_student(struct Student *students, int student_num);
void guess_number();
void calc_avg_grade(struct Student *students, int student_num);
int main() {
struct Student students[MAX_STUDENT];
int student_num = 0;
int choice = 0;
int login_res = 0;
while (1) {
printf("欢迎使用教务系统!\n");
printf("请选择功能:\n");
printf("1. 注册\n");
printf("2. 登录\n");
printf("3. 退出\n");
scanf("%d", &choice);
switch (choice) {
case 1:
register_student(students, student_num);
student_num++;
break;
case 2:
login_res = login(students, student_num);
if (login_res == -1) {
printf("账号已被冻结!\n");
return 0;
} else if (login_res == -2) {
printf("用户名或密码错误!\n");
} else {
printf("欢迎回来,%s!\n", students[login_res].name);
printf("学号:%s\n", students[login_res].student_id);
printf("请选择功能:\n");
printf("1. 你说我猜游戏\n");
printf("2. 计算平均成绩\n");
scanf("%d", &choice);
switch (choice) {
case 1:
guess_number();
break;
case 2:
calc_avg_grade(students, student_num);
break;
default:
printf("无效的选择!\n");
break;
}
}
break;
case 3:
return 0;
default:
printf("无效的选择!\n");
break;
}
}
}
// 登录函数
int login(struct Student *students, int student_num) {
char name[MAX_NAME_LENGTH];
char password[MAX_PASSWORD_LENGTH];
int i, j;
int error_count = 0;
while (1) {
printf("请输入用户名:");
scanf("%s", name);
printf("请输入密码:");
scanf("%s", password);
for (i = 0; i < student_num; i++) {
if (strcmp(students[i].name, name) == 0) {
if (strcmp(students[i].password, password) == 0) {
return i;
} else {
error_count++;
printf("用户名或密码错误!\n");
if (error_count == 3) {
printf("您的账号已被冻结!\n");
return -1;
}
break;
}
}
}
if (i == student_num) {
error_count++;
printf("用户名或密码错误!\n");
if (error_count == 3) {
printf("您的账号已被冻结!\n");
return -1;
}
}
}
return -2;
}
// 注册函数
void register_student(struct Student *students, int student_num) {
char name[MAX_NAME_LENGTH];
char password[MAX_PASSWORD_LENGTH];
char student_id[10];
int i, j;
while (1) {
printf("请输入用户名(由字母组成):");
scanf("%s", name);
for (i = 0; i < strlen(name); i++) {
if (name[i] >= '0' && name[i] <= '9') {
break;
}
}
if (i != strlen(name)) {
printf("用户名包含非法字符,请重新输入!\n");
continue;
}
printf("请输入密码(至少6位):");
scanf("%s", password);
if (strlen(password) < 6) {
printf("密码长度不足,请重新输入!\n");
continue;
}
printf("请输入学号:");
scanf("%s", student_id);
for (i = 0; i < student_num; i++) {
if (strcmp(students[i].name, name) == 0) {
printf("用户名已存在,请重新输入!\n");
break;
}
}
if (i == student_num) {
strcpy(students[student_num].name, name);
strcpy(students[student_num].password, password);
strcpy(students[student_num].student_id, student_id);
printf("注册成功!\n");
return;
}
}
}
// 猜数字游戏函数
void guess_number() {
int number = rand() % 100 + 1;
int guess = 0;
int count = 0;
printf("我已经想好了一个1-100之间的数字,请你猜猜是多少:\n");
while (1) {
scanf("%d", &guess);
count++;
if (guess < number) {
printf("你输入的数偏小,请再猜:\n");
} else if (guess > number) {
printf("你输入的数偏大,请再猜:\n");
} else {
printf("恭喜你猜对了!你猜了%d次。\n", count);
return;
}
}
}
// 计算平均成绩函数
void calc_avg_grade(struct Student *students, int student_num) {
int i, j;
for (i = 0; i < student_num; i++) {
printf("请输入%s的五门成绩:", students[i].name);
for (j = 0; j < 5; j++) {
scanf("%d", &students[i].grade[j]);
}
students[i].avg_grade = 0;
for (j = 0; j < 5; j++) {
students[i].avg_grade += students[i].grade[j];
}
students[i].avg_grade /= 5;
printf("%s的平均成绩为:%.2f\n", students[i].name, students[i].avg_grade);
}
}
```
阅读全文