如果想看完整版的实验报告,我上传了资源,下面内容只是实验报告的精华
需求描述
系统角色:学生、教师、系统管理员。其功能分别描述如下:
一、学生:普通用户,能够完成以下功能:
1)录入个人信息,包括:
(1)姓名;
(2)年龄;
(3)性别;
请大家根据学校教学管理系统内容添加
2)信息查询
根据自己的学号查询自己的相关信息,包括:
(1)姓名;
(2)年龄;
(3)性别;
(4)所选课程名;
请大家根据学校教学管理系统内容添加。
3)信息修改
能够修改部分个人信息,包括:姓名、年龄、性别。
4)学生选课
学生根据时间,添加选修课程相关信息,包括:
(1)所选课程名;
(2)学分;
(3)上课时间;
(4)上课地点;
(5)授课教师
请大家根据学校教学管理系统内容添加。
二、教师:普通用户,能够完成以下操作:
1)课程信息录入
2)课程信息修改
3)学生选修课程信息查询
4)学生信息打印…
三、系统管理员
能够添加、删除和修改系统用户,设置用户权限。包括
1)添加新用户
2)删除用户
概要设计
一.通过自定义void函数完成:
学生使用功能流程
主界面:
1)资料浏览
2)资料修改
3)选课查询
4)退出
教师使用流程描述:
主界面:
1)课程录入
2)课程修改
3)课程打印
4)课表查询
5)退出”
系统管理员使用流程
主界面:
1)用户资料打印
2)添加用户
3)删除用户
4)修改用户权限
5)退出
二.通过使用指针进行传参 printUserInfo(char* username) ,打印用户信息。
void printUserInfo(char* username)
{
if (strcmp(username, "admin") == 0)
{
printf("用户名:%s,权限:管理员\n", username);
}
else if (strcmp(username, "guest") == 0)
{
printf("用户名:%s,权限:访客\n", username);
}
else
{
printf("用户名不存在。\n");
}
}
三.主程序主要通过
1)“if else”语句
2)for循环
3)循环嵌套
4)结构体
5)指针数组
6)strcpy语句
7)switch语句
8)调用函数
9)宏定义
详细设计(流程图)
四.程序源码(这个代码直接就能用,上面有我写的注释,就不一一赘述了)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
typedef struct
{
int id;
char name[50];
char major[50];
} Student;
// 定义课程结构体
typedef struct
{
int id;
char name[50];
} Course;//typedefe 重新定义 Course等于struct ,则调用时 Course num(随机定义名)
// 假设最多有100个学生和10门课程
#define MAX_STUDENTS 100
#define MAX_COURSES 10
// 全局变量
Student students[MAX_STUDENTS];
int numStudents = 0;
Course courses[MAX_COURSES];
int numCourses = 0;
// 函数声明
void login();
void studentMenu(int studentIndex);
void teacherMenu();
void adminMenu();
void printStudentInfo(int studentIndex);
void modifyStudentInfo(int studentIndex);
void searchCourse(int studentIndex);
void addCourse();
void modifyCourse();
void printCourseStudents();
void printCourseSchedule();
void printUserInfo(char* username);
void addUser();
void deleteUser();
void modifyUserPermissions();
// 程序入口
int main()
{
// 初始化课程
Course course1 = { 1, "计算机科学" };
Course course2 = { 2, "数学" };
courses[numCourses++] = course1;
courses[numCourses++] = course2;
// 初始化学生
Student student1 = { 1, "张三", "计算机科学" };
Student student2 = { 2, "李四", "数学" };
students[numStudents++] = student1;
students[numStudents++] = student2;
// 登录
login();
return 0;
}
// 登录菜单
void login()
{
int role;
printf("请选择角色:\n");
printf("1. 学生\n");
printf("2. 教师\n");
printf("3. 管理员\n");
printf("请输入数字选择角色:");
scanf("%d", &role);
if (role == 1)
{
int studentIndex;
int id,gum;
printf("请输入学生ID:");
scanf("%d", &id);
for (int i = 0; i < numStudents; i++)
{
if (students[i].id == id)
{
studentIndex = i;
studentMenu(studentIndex);
return;
}
}
printf("学生ID不存在,请重新登录。\n");
scanf("%d",&gum);
login();
}
else if (role == 2) {
teacherMenu();
}
else if (role == 3) {
adminMenu();
}
else
{
printf("无效的角色,请重新登录。\n");
login();
}
}
// 学生菜单
void studentMenu(int studentIndex)
{
int choice;
printf("\n欢迎,%s!\n", students[studentIndex].name);
printf("请选择功能:\n");
printf("1. 资料浏览\n");
printf("2. 资料修改\n");
printf("3. 选课查询\n");
printf("4. 退出\n");
printf("请输入数字选择功能:");
scanf("%d", &choice);
switch (choice)
{
case 1:
printStudentInfo(studentIndex);
studentMenu(studentIndex);
break;
case 2:
modifyStudentInfo(studentIndex);
studentMenu(studentIndex);
break;
case 3:
searchCourse(studentIndex);
studentMenu(studentIndex);
break;
case 4:
login();
break;
default:
printf("无效的选择,请重新输入。\n");
studentMenu(studentIndex);
break;
}
}
// 教师菜单
void teacherMenu() {
int num;
printf("\n欢迎,教师!\n");
printf("请选择功能:\n");
printf("1. 课程录入\n");
printf("2. 课程修改\n");
printf("3. 课程打印\n");
printf("4. 课表查询\n");
printf("5. 退出\n");
printf("请输入数字选择功能:");
scanf("%d", &num);
switch (num)
{
case 1:
addCourse();
teacherMenu();
break;
case 2:
modifyCourse();
teacherMenu();
break;
case 3:
printCourseStudents();
teacherMenu();
break;
case 4:
printCourseSchedule();
teacherMenu();
break;
case 5:
login();
break;
default:
printf("无效的选择,请重新输入。\n");
teacherMenu();
break;
}
}
// 管理员菜单
void adminMenu()
{
int choice;
printf("\n欢迎,管理员!\n");
printf("请选择功能:\n");
printf("1. 用户资料打印\n");
printf("2. 添加用户\n");
printf("3. 删除用户\n");
printf("4. 修改用户权限\n");
printf("5. 退出\n");
printf("请输入数字选择功能:");
scanf("%d", &choice);
switch (choice)
{
case 1: {
char username[50];
printf("请输入要打印信息的用户名:");
scanf("%s", username);
printUserInfo(username);
adminMenu();
break;
}
case 2:
addUser();
adminMenu();
break;
case 3:
deleteUser();
adminMenu();
break;
case 4:
modifyUserPermissions();
adminMenu();
break;
case 5:
login();
break;
default:
printf("无效的选择,请重新输入。\n");
adminMenu();
break;
}
}
// 打印学生信息
void printStudentInfo(int studentIndex) {
printf("\n学号:%d\n", students[studentIndex].id);
printf("姓名:%s\n", students[studentIndex].name);
printf("专业:%s\n", students[studentIndex].major);
}
// 修改学生信息
void modifyStudentInfo(int studentIndex)
{
int choice;
printf("\n请选择要修改的字段:\n");
printf("1. 学号\n");
printf("2. 姓名\n");
printf("3. 专业\n");
printf("请输入数字选择字段:");
scanf("%d", &choice);
switch (choice)
{
case 1:
printf("请输入新的学号:");
scanf("%d", &students[studentIndex].id);
break;
case 2:
printf("请输入新的姓名:");
scanf("%s", students[studentIndex].name);
break;
case 3:
printf("请输入新的专业:");
scanf("%s", students[studentIndex].major);
break;
default:
printf("无效的选择,请重新输入。\n");
modifyStudentInfo(studentIndex);
break;
}
printf("学生信息修改成功!\n");
}
// 查询选课信息
void searchCourse(int studentIndex) {
char courseName[50];
printf("请输入要查询的课程名:");
scanf("%s", courseName);
for (int i = 0; i < numCourses; i++) {
if (strcmp(courses[i].name, courseName) == 0) {
printf("学生%s是否选修%s课程:是\n", students[studentIndex].name, courseName);
return;
}
}
printf("学生%s是否选修%s课程:否\n", students[studentIndex].name, courseName);
}
// 添加课程
void addCourse()
{
if (numCourses >= MAX_COURSES) {
printf("课程数量已达上限,无法添加新课程。\n");
return;
}
Course course;
int id;
printf("请输入课程ID:");
scanf("%d", &id);
for (int i = 0; i < numCourses; i++) {
if (courses[i].id == id) {
printf("课程ID已存在,请重新输入。\n");
addCourse();
return;
}
}
course.id = id;
printf("请输入课程名称:");
scanf("%s", course.name);
courses[numCourses++] = course;
printf("课程添加成功!\n");
}
// 修改课程
void modifyCourse() {
int choice;
printf("请输入要修改的课程ID:");
scanf("%d", &choice);
for (int i = 0; i < numCourses; i++) {
if (courses[i].id == choice) {
printf("\n当前课程信息:\n");
printf("课程ID:%d\n", courses[i].id);
printf("课程名称:%s\n", courses[i].name);
printf("请输入新的课程名称:");
scanf("%s", courses[i].name);
printf("课程信息修改成功!\n");
return;
}
}
printf("课程ID不存在,请重新输入。\n");
modifyCourse();
}
// 打印课程学生
void printCourseStudents()
{
int courseId;
printf("请输入课程ID:");
scanf("%d", &courseId);
for (int i = 0; i < numCourses; i++)
{
if (courses[i].id == courseId) {
printf("\n选修%s课程的学生如下:\n", courses[i].name);
for (int j = 0; j < numStudents; j++) {
printf("学号:%d,姓名:%s\n", students[j].id, students[j].name);
}
return;
}
}
printf("课程ID不存在,请重新输入。\n");
printCourseStudents();
}
// 打印教师课表
void printCourseSchedule()
{
printf("教师课表如下:\n");
for (int i = 0; i < numCourses; i++) {
printf("课程ID:%d,课程名称:%s\n", courses[i].id, courses[i].name);
}
}
// 打印用户信息
void printUserInfo(char* username) {
// 假设有两个用户admin和guest
if (strcmp(username, "admin") == 0)
{
printf("用户名:%s,权限:管理员\n", username);
}
else if (strcmp(username, "guest") == 0) {
printf("用户名:%s,权限:访客\n", username);
}
else {
printf("用户名不存在。\n");
}
}
// 添加用户
void addUser()
{
char username[50];
char password[50];
printf("请输入用户名:");
scanf("%s", username);
printf("请输入初始密码:");
scanf("%s", password);
printf("用户添加成功!\n");
}
// 删除用户
void deleteUser() {
char username[50];
printf("请输入要删除的用户名:");
scanf("%s", username);
// 假设不能删除admin用户
if (strcmp(username, "admin") == 0)
{
printf("不能删除管理员账号。\n");
return;
}
printf("用户删除成功!\n");
}
// 修改用户权限
void modifyUserPermissions()
{
char username[50];
int permissions;
printf("请输入要修改权限的用户名:");
scanf("%s", username);
printf("请输入新的权限(1表示管理员,2表示访客):");
scanf("%d", &permissions);
printf("用户权限修改成功!\n");
}