第一章 概 述
一、设计的背景与意义
学生信息管理系统设计的背景是为了更高效地管理学校或教育机构的学生信息,包括学生的个人资料、成绩、考勤、课程安排等。通过该系统,学校可以更方便地查找和更新学生信息,为老师和管理人员提供更便捷的工作方式。
这样的系统的意义在于提高学校管理的效率和准确性,减少人工操作的错误和成本。同时,学生信息管理系统也可以提供数据分析和报告功能,帮助学校更好地了解学生的整体情况,为学生提供更有针对性的教学和管理服务。
二、设计的目标
加深对结构化理论和基本知识的理解,掌握使用C语言进行结构化程序设计的基本方法,提高学生的编程能力及综合运用C语言解决实际问题的能力。综合运用C语言与结构化程序开发方法,分析、设计和编写一个“学生信息管理系统”,并满足以下要求:
1.“学生信息管理系统”需要提供以下基本功能:
(1)能够从外部数据文件读入学生信息,并以数据文件的形式存储学生信息;
(2)能够增加学生信息,按学号修改、删除学生的信息;
(3)能够按学号、姓名等方式查询学生信息;
(4)能够根据条件对学生信息进行排序浏览;
(5)能够根据条件统计学生人数;
(6)查看所有学生信息。
2.由顶而下理清系统功能需求,合理划分系统功能模块,绘制系统功能模块图。
3.正确抽象和定义函数模块,各函数功能明确、层次清晰。
4.根据学生数据的特点和操作需求,合理定义数据类型,选择特定的数据组织及数据存储方式,正确设计功能算法,并完成代码编写。
5.系统以菜单的方式提供人机交互。
第二章 相关技术
一、开发环境
系统以C语言作为开发语言,以Dev C++为开发环境。
二、C语言
/*
源代码:
数科3班 谢杰 2023236072
综合运用C语言与结构化程序开发方法,分析、设计和编写一个“学生信息管理系统”,并满足以下要求:
1.“学生信息管理系统”需要提供以下基本功能:
(1)能够从外部数据文件读入学生信息,并以数据文件的形式存储学生信息;
(2)能够增加学生信息,按学号修改、删除学生的信息;
(3)能够按学号、姓名等方式查询学生信息;
(4)能够根据条件对学生信息进行排序浏览;
(5)能够根据条件统计学生人数;
(6)查看所有学生信息。
2.由顶而下理清系统功能需求,合理划分系统功能模块,绘制系统功能模块图。
3.正确抽象和定义函数模块,各函数功能明确、层次清晰。
4.根据学生数据的特点和操作需求,合理定义数据类型,选择特定的数据组织及数据存储方式,正确设计功能算法,并完成代码编写。
5.系统以菜单的方式提供人机交互。
6.要求主页面显示:
1.录入学生信息
2.查找学生信息
3.删除学生信息
4.修改学生信息
5.插入学生信息
6.排序学生信息
7.统计学生总数
8.显示所有学生信息
0.退出系统
*/
/*
数科3班 谢杰 2023236072
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT_NUM 100 // 最大学生数
#define FILE_NAME "student.txt" // 数据文件名
// 学生信息结构体
typedef struct {
char id[20]; // 学号
char name[20]; // 姓名
int age; // 年龄
float score; // 成绩
} Student;
// 学生信息数组
Student students[MAX_STUDENT_NUM];
int studentNum = 0; // 学生数
// 从文件中读取学生信息
void readFromFile() {
FILE *fp = fopen(FILE_NAME, "r");
if (fp == NULL) {
printf("无法打开文件 %s\n", FILE_NAME);
return;
}
while (!feof(fp)) {
Student student;
fscanf(fp, "%s %s %d %f", student.id, student.name, &student.age, &student.score);
students[studentNum++] = student;
}
fclose(fp);
}
// 将学生信息写入文件
void writeToFile() {
FILE *fp = fopen(FILE_NAME, "w");
if (fp == NULL) {
printf("无法打开文件 %s\n", FILE_NAME);
return;
}
for (int i = 0; i < studentNum; i++) {
fprintf(fp, "%s %s %d %f\n", students[i].id, students[i].name, students[i].age, students[i].score);
}
fclose(fp);
}
// 添加学生信息
void addStudent() {
if (studentNum >= MAX_STUDENT_NUM) {
printf("学生数已达到最大值,无法添加!\n");
return;
}
Student student;
printf("请输入学生信息(学号 姓名 年龄 成绩):");
scanf("%s %s %d %f", student.id, student.name, &student.age, &student.score);
students[studentNum++] = student;
printf("添加成功!\n");
}
// 根据学号查找学生信息
void findStudentById() {
char id[20];
printf("请输入要查找的学生学号:");
scanf("%s", id);
for (int i = 0; i < studentNum; i++) {
if (strcmp(students[i].id, id) == 0) {
printf("学号\t姓名\t年龄\t成绩\n");
printf("%s\t%s\t%d\t%.2f\n", students[i].id, students[i].name, students[i].age, students[i].score);
return;
}
}
printf("未找到该学生!\n");
}
// 根据学号修改学生信息
void modifyStudentById() {
char id[20];
printf("请输入要修改的学生学号:");
scanf("%s", id);
for (int i = 0; i < studentNum; i++) {
if (strcmp(students[i].id, id) == 0) {
printf("请输入修改后的学生信息(学号 姓名 年龄 成绩):");
scanf("%s %s %d %f", students[i].id, students[i].name, &students[i].age, &students[i].score);
printf("修改成功!\n");
return;
}
}
printf("未找到该学生!\n");
}
// 根据学号删除学生信息
void deleteStudentById() {
char id[20];
printf("请输入要删除的学生学号:");
scanf("%s", id);
for (int i = 0; i < studentNum; i++) {
if (strcmp(students[i].id, id) == 0) {
for (int j = i; j < studentNum - 1; j++) {
students[j] = students[j + 1];
}
studentNum--;
printf("删除成功!\n");
return;
}
}
printf("未找到该学生!\n");
}
// 插入学生信息
void insertStudent() {
int index;
if (studentNum >= MAX_STUDENT_NUM) {
printf("学生数已达到最大值,无法插入!\n");
return;
}
printf("请输入要插入的位置(从0开始):");
scanf("%d", &index);
if (index < 0 || index > studentNum) {
printf("插入位置不合法!\n");
return;
}
Student student;
printf("请输入学生信息(学号 姓名 年龄 成绩):");
scanf("%s %s %d %f", student.id, student.name, &student.age, &student.score);
for (int i = studentNum; i > index; i--) {
students[i] = students[i - 1];
}
students[index] = student;
studentNum++;
printf("插入成功!\n");
}
// 根据条件排序学生信息
void sortStudent() {
int choice;
printf("请选择排序方式(1.按学号升序 2.按成绩降序):");
scanf("%d", &choice);
if (choice == 1) {
for (int i = 0; i < studentNum - 1; i++) {
for (int j = 0; j < studentNum - i - 1; j++) {
if (strcmp(students[j].id, students[j + 1].id) > 0) {
Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
} else if (choice == 2) {
for (int i = 0; i < studentNum - 1; i++) {
for (int j = 0; j < studentNum - i - 1; j++) {
if (students[j].score < students[j + 1].score) {
Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
} else {
printf("选择不合法!\n");
return;
}
printf("排序成功!\n");
}
// 统计学生总数
void countStudent() {
printf("学生总数为:%d\n", studentNum);
}
// 显示所有学生信息
void showAllStudent() {
printf("学号\t姓名\t年龄\t成绩\n");
for (int i = 0; i < studentNum; i++) {
printf("%s\t%s\t%d\t%.2f\n", students[i].id, students[i].name, students[i].age, students[i].score);
}
}
// 主函数
int main() {
readFromFile(); // 从文件中读取学生信息
int choice;
while (1) {
printf("|++++++++++++++++++++++++++++++++++|\n");
printf("| 学生信息管理系统 |\n");
printf("|++++++++++++++++++++++++++++++++++|\n");
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("| 0.退出系统 |\n");
printf("|++++++++++++++++++++++++++++++++++|\n");
printf("| 请选择操作: |\n");
printf("|++++++++++++++++++++++++++++++++++|\n");
scanf("%d", &choice);
switch (choice) {
case 1:
addStudent();
break;
case 2:
findStudentById();
break;
case 3:
deleteStudentById();
break;
case 4:
modifyStudentById();
break;
case 5:
insertStudent();
break;
case 6:
sortStudent();
break;
case 7:
countStudent();
break;
case 8:
showAllStudent();
break;
case 0:
writeToFile(); // 将学生信息写入文件
printf("谢谢使用!\n");
return 0;
default:
printf("选择不合法!\n");
break;
}
}
return 0;
}
第三章 系统分析与设计
一、系统功能分析
1.学生信息的录入:录入学生的基本信息,包括学号、姓名、年龄、性别、联系方式等。
2.学生信息的查询:根据学号或姓名查询学生的详细信息。
3.学生信息的修改:可以修改学生的基本信息。
4.学生信息的删除:可以删除学生的信息。
5. 学生成绩的录入和查询:录入学生成绩并能够查看学生成绩信息。
二、系统功能设计
1.使用菜单系统实现主界面,包括录入、查询、修改、删除和成绩管理等选项。
2.使用结构体来存储学生信息,包括学号、姓名、年龄、性别、联系方式以及成绩。
3. 使用文件来进行数据存储,包括学生基本信息和学生成绩信息的存储。
三、数据存储
1.学生基本信息可以存储在一个文本文件中,一行代表一个学生的信息,字段之间使用逗号或空格进行分隔。
2. 学生成绩可以分别存储在另一个文本文件中,每行记录学生的学号和对应的成绩信息,使用逗号或空格进行分隔。
第四章 系统实现
一、系统主界面
图4.1 系统主界面
图4.2 系统主界面该功能的关键代码如图:
二、增加学生
图4.3 增加学生代码
图4.4 增加学生运行结果
三、显示所有学生
图4.5 显示所有学生代码
图4.6 显示所有学生运行结果
学生信息管理系统是一个基于C语言开发的应用程序,旨在实现对学生信息的管理和查询。系统功能包括学生信息的录入、查询、修改、删除以及成绩管理。采用菜单系统作为主界面,通过结构体来存储学生信息,包括学号、姓名、年龄、性别、联系方式和成绩等。数据存储方面,采用文件存储学生基本信息和成绩信息,每个学生信息为文件中的一行记录,字段之间使用逗号或空格进行分隔。系统实现了对学生信息的灵活管理和有效查询,为教师和学校管理人员提供了便利。通过该系统,用户可以高效地录入、查询、修改和删除学生信息,并能够管理学生成绩,从而实现学生信息的全面管理和统计分析。
在学习C语言的过程中,我深刻体会到了它作为一种结构化编程语言的重要性和广泛应用。通过学习C语言,我对计算机程序设计的基本原理和方法有了更深入的理解,也培养了自己的编程能力和逻辑思维能力。
首先,C语言的语法简洁明了,清晰易懂。它的语法规则严谨,逻辑性强,对于初学者来说,相对容易上手。通过学习C语言,我能够掌握变量、数据类型、运算符等基本概念,了解程序的结构和控制流程,以及函数的定义和调用,这为我打下了扎实的编程基础。
其次,在学习C语言的过程中,我更加深刻地认识到了程序的执行原理和内存管理的重要性。C语言提供了丰富的指针和内存操作的功能,这让我能够更深入地了解程序的底层运行机制,也使我更加谨慎地进行内存管理,避免了内存泄漏等问题。
此外,通过C语言的学习,我也学会了如何进行模块化的程序设计和模块间的数据传递,这有助于我写出更加清晰、高效和易于维护的程序。我也了解到了C语言在系统编程和嵌入式开发中的重要性,它不仅能够编写高效的系统程序,还可以对硬件进行直接控制,这为我以后的学习和工作奠定了坚实的基础。
总的来说,学习C语言不仅仅是学习一门编程语言,更是学习编程思维和程序设计的基础。在未来的学习和工作中,我会继续加强对C语言的学习和应用,不断提升自己的编程能力和解决问题的能力,为自己的发展打下坚实的基础。