main.c
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
// 函数声明
#include"stuFunction.h"
int main() {
char choice;
int loggedIn = 0; // 标记是否登录,0表示未登录,1表示已登录
int num = 0; // 班级学生人数
char names[100][100]; // 假设最多100个学生,姓名最多100个字符
int scores[100]; // 对应学生成绩数组
char registeredUsername[50];
char registeredPassword[50];
while (1) {
if (!loggedIn) {
printf("1. 注册\n");
printf("2. 登录\n");
printf("3. 退出\n");
printf("请输入你的选择: ");
scanf(" %c", &choice);
switch (choice) {
case '1':{
registerAccount(registeredUsername,registeredPassword);
break;
}
case '2':{
loggedIn = login(registeredUsername,registeredPassword);
if (loggedIn) {
printf("登录成功,欢迎进入班级成绩管理系统!\n");
}
break;
}
case '3':
exit(0);
default:
printf("无效的选择,请重新输入!\n");
}
} else {
// 已登录后的操作界面
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("请输入你的选择: ");
scanf(" %c", &choice);
switch (choice) {
case '1':{
printf("请输入班级学生人数: ");
scanf("%d", &num);
inputStudentInfo(names, scores, num);
break;
}
case '2':{
showStudentInfo(names, scores, num);
break;
}
case '3':{
addStudent(names, scores, &num);
break;
}
case '4':{
deleteStudent(names, scores, &num);
break;
}
case '5':{
modifyScore(names, scores, num);
break;
}
case '6':{
searchStudent(names, scores, num);
break;
}
case '7':{
sortStudent(names, scores, num);
break;
}
case '8':{
analyzeScores(scores, num);
break;
}
case '9':{
exit(0);
loggedIn = 0; // 标记为未登录
break;
}
default:
printf("无效的选择,请重新输入!\n");
}
}
}
return 0;
}
stuFunction.c
#include<myhead.h>
// 实现注册功能,存储注册信息到全局数组
void registerAccount(char registeredUsername[],char registeredPassword[]) {
printf("请输入用户名: ");
scanf("%s", registeredUsername);
printf("请输入密码: ");
scanf("%s", registeredPassword);
printf("注册成功!\n");
}
// 使用注册信息进行登录验证
int login(char registeredUsername[],char registeredPassword[]) {
char inputUsername[100];
char inputPassword[100];
printf("请输入用户名: ");
scanf("%s", inputUsername);
printf("请输入密码: ");
scanf("%s", inputPassword);
if (strcmp(inputUsername, registeredUsername) == 0 &&
strcmp(inputPassword, registeredPassword) == 0) {
return 1;
}
printf("用户名或密码错误,请重新登录!\n");
return 0;
}
// 录入学生信息函数
void inputStudentInfo(char names[][100], int scores[], int num) {
for (int i = 0; i < num; i++) {
printf("请输入第 %d 个学生的姓名: ", i + 1);
scanf("%s", names[i]);
printf("请输入第 %d 个学生的成绩: ", i + 1);
scanf("%d", &scores[i]);
}
printf("学生信息录入完成!\n");
}
// 展示学生信息函数
void showStudentInfo(char names[][100], int scores[], int num) {
printf("当前班级学生信息如下:\n");
for (int i = 0; i < num; i++) {
printf("姓名: %s,成绩: %d\n", names[i], scores[i]);
}
}
// 添加学生信息函数
void addStudent(char names[][100], int scores[], int *num) {
char newName[100];
int newScore;
printf("请输入要添加的学生姓名: ");
scanf("%s", newName);
printf("请输入要添加的学生成绩: ");
scanf("%d", &newScore);
strcpy(names[*num], newName);
scores[*num] = newScore;
(*num)++;
printf("学生信息添加成功!\n");
}
// 删除学生信息函数
void deleteStudent(char names[][100], int scores[], int *num) {
char targetName[100];
printf("请输入要删除的学生姓名: ");
scanf("%s", targetName);
int found = 0; // 标记是否找到要删除的学生
for (int i = 0; i < *num; i++) {
if (strcmp(names[i], targetName) == 0) {
// 找到后将后面的元素往前移覆盖当前元素
for (int j = i; j < *num - 1; j++) {
strcpy(names[j], names[j + 1]);
scores[j] = scores[j + 1];
}
(*num)--; // 学生数量减1
found = 1;
printf("学生信息删除成功!\n");
break;
}
}
if (!found) {
printf("未找到该姓名的学生信息,删除失败!\n");
}
}
// 修改学生成绩函数
void modifyScore(char names[][100], int scores[], int num) {
char targetName[100];
printf("请输入要修改成绩的学生姓名: ");
scanf("%s", targetName);
int found = 0;
for (int i = 0; i < num; i++) {
if (strcmp(names[i], targetName) == 0) {
printf("请输入新的成绩: ");
scanf("%d", &scores[i]);
found = 1;
printf("成绩修改成功!\n");
break;
}
}
if (!found) {
printf("未找到该姓名的学生,成绩修改失败!\n");
}
}
// 查找学生信息函数
void searchStudent(char names[][100], int scores[], int num) {
char targetName[100];
printf("请输入要查找的学生姓名: ");
scanf("%s", targetName);
printf("查找到的学生信息如下:\n");
for (int i = 0; i < num; i++) {
if (strcmp(names[i], targetName) == 0) {
printf("姓名: %s,成绩: %d\n", names[i], scores[i]);
}
}
}
// 学生信息排序函数
void sortStudent(char names[][100], int scores[], int num) {
char choice;
printf("请输入排序方式(A表示升序,D表示降序): ");
scanf(" %c", &choice);
// 选择排序算法来实现,这里使用简单的冒泡排序示例
for (int i = 0; i < num - 1; i++) {
for (int j = 0; j < num - i - 1; j++) {
if ((choice == 'A' && scores[j] > scores[j + 1]) ||
(choice == 'D' && scores[j] < scores[j + 1])) {
// 交换成绩
int tempScore = scores[j];
scores[j] = scores[j + 1];
scores[j + 1] = tempScore;
// 交换对应的姓名
char tempName[100];
strcpy(tempName, names[j]);
strcpy(names[j], names[j + 1]);
strcpy(names[j + 1], tempName);
}
}
}
if (choice == 'A') {
printf("已按升序完成学生信息排序!\n");
} else if (choice == 'D') {
printf("已按降序完成学生信息排序!\n");
} else {
printf("无效的排序选择,排序未执行!\n");
}
}
// 班级成绩分析函数
void analyzeScores(int scores[], int num) {
if (num == 0) {
printf("暂无学生成绩信息,无法进行分析!\n");
return;
}
int sum = 0;
int maxScore = scores[0];
int minScore = scores[0];
int passCount = 0; // 及格人数
int excellentCount = 0; // 优秀人数
for (int i = 0; i < num; i++) {
sum += scores[i];
if (scores[i] > maxScore) {
maxScore = scores[i];
}
if (scores[i] < minScore) {
minScore = scores[i];
}
if (scores[i] >= 60) {
passCount++;
}
if (scores[i] >= 90) {
excellentCount++;
}
}
double average = (double)sum / num;
double passRate = (double)passCount / num * 100;
double excellentRate = (double)excellentCount / num * 100;
printf("班级成绩分析结果如下:\n");
printf("最高分: %d\n", maxScore);
printf("最低分: %d\n", minScore);
printf("平均分: %.2f\n", average);
printf("及格率: %.2f%%\n", passRate);
printf("优秀率: %.2f%%\n", excellentRate);
}
stuFunction.h
#ifndef STUFUNCTION
#define STUFUNCTION
void registerAccount(char registeredUsername[],char registeredPassword[]);
int login(char registeredUsername[],char registeredPassword[]);
void inputStudentInfo(char names[][100], int scores[], int num);
void showStudentInfo(char names[][100], int scores[], int num);
void addStudent(char names[][100], int scores[], int *num);
void deleteStudent(char names[][100], int scores[], int *num);
void modifyScore(char names[][100], int scores[], int num);
void searchStudent(char names[][100], int scores[], int num);
void sortStudent(char names[][100], int scores[], int num);
void analyzeScores(int scores[], int num);
#endif