这是学校C语言课程设计,小试牛刀大家可以借鉴,欢迎各位在这基础上整花活!(记得分享!!!!)
学校要求:
针对用户群体对该系统的需求分析,结合项目要求,精心设计并开发了一套具备多功能模块的系统。在开发完成后,我们还对系统进行了全面的测试和评估,以确保其质量和性能达到预期。以下为主要需求:
学生信息包括:学号、姓名、性别、家庭住址、联系电话、语文、数学、外语三门单科成绩、考试平均成绩、考试名次、品德成绩、综合测评总分及名次。其中,考试平均成绩与品德成绩分别占综合测评总分的80%与20%。
1.学生信息处理:
(1)输入学生基本信息,并按照学号顺序排列。
(2)插入或修改同学信息。
(3)删除同学信息:在确认删除前需要核实待删除同学信息
(4)查询特定条件下(如学号或姓名)的学生信息
2.学生数据处理:
(1)录入各科目考试成绩,并根据公式:(语文+数学+外语)/3 计算平均成绩及名次。
(2) 输入品德成绩并计算综合测评总分及名次。公式:(考试平均成绩)*0.8 + 品德成绩*0.2。
(3)学生数据管理:输入学号或姓名,显示该同学信息。
(4)学生数据导入:从文件中导入学生信息。
(5)学生数据保存:将学生信息存储至文件。
3.学生综合信息输出,并且在屏幕上显示。
大体如图:

代码还有很多不足之处,记得修改,花活方面可以在加:成绩等级划定,设置账户密码等等....
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#ifdef _WIN32
#include <windows.h>
#define SLEEP(sec) Sleep((sec) * 1000)
HANDLE hConsole;
#else
#include <unistd.h>
#define SLEEP(sec) sleep(sec)
#endif
#define MAX_STUDENT 100 // 最多学生数目
#define FILE_NAME "./students.dat" // 文件名
// 学生结构体
typedef struct {
int id;
char name[20];
char sex[5];
char address[50];
char phone[20];
float chinese;
float math;
float english;
float average;
float score;
int rank;
float morality;
float evaluation;
int eval_rank;
} Student;
Student students[MAX_STUDENT]; // 学生数组
int num_students = 0; // 学生数目
// 函数声明
void welcome();
void menu();
void save_students();
void load_students();
void input_student();
void modify_student();
void delete_student();
void search_student();
void input_scores();
void calculate_score(int index);
void calculate_rank();
void input_evaluation();
void calculate_evaluation(int index);
void calculate_eval_rank();
void print_students();
void print_student(Student student);
int main() {
#ifdef _WIN32
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
#endif
welcome();
load_students();
menu();
return 0;
}
// 欢迎界面
void welcome() {
char title[] = "欢迎使用学生信息管理系统!";
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN);
#endif
int width = strlen(title) + 4;
for (int i = 0; i < width; i++) {
printf("*");
}
printf("\n* %s *\n", title);
for (int i = 0; i < width; i++) {
printf("*");
}
printf("\n");
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN);
#endif
SLEEP(2); // 延迟2秒
printf("正在加载ing");
for (int i = 0; i < 8; i++) {
printf(".");
fflush(stdout); // 刷新输出缓冲区
SLEEP(1);
}
printf("\n--------------------");
printf("\n加载完成!\n");
printf("--------------------\n");
save_students();
// 定义一个time_t类型变量用于存储当前时间
time_t currentTime;
// 获取当前系统时间
time(¤tTime);
// 将当前时间转换为本地时间格式,并赋值给localTime变量
struct tm *localTime = localtime(¤tTime);
// 打印当前本地时间
printf("--------------------\n");
printf("登录日期: %04d-%02d-%02d", localTime->tm_year + 1900, localTime->tm_mon + 1, localTime->tm_mday);
printf(" %02d:%02d:%02d\n", localTime->tm_hour, localTime->tm_min, localTime->tm_sec);
printf("--------------------\n");
}
// 菜单
void menu() {
while (1) {
printf("\n");
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN);
#endif
printf("--------------------\n");
printf(" ↓请选择操作 ↓\n");
printf("--------------------\n");
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN);
#endif
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("请选择操作(1-8):\n");
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN);
#endif
printf("--------------------\n");
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN);
#endif
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
input_student();
break;
case 2:
modify_student();
break;
case 3:
delete_student();
break;
case 4:
search_student();
break;
case 5:
input_scores();
break;
case 6:
input_evaluation();
break;
case 7:
print_students();
break;
case 8:
return;
default:
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED);
#endif
printf("输入无效,请重新输入\n");
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN);
#endif
}
}
}
// 保存学生信息到文件中
void save_students() {
FILE *fp = fopen(FILE_NAME, "wb");
if (fp == NULL) {
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED);
#endif
printf("保存文件失败\n");
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN);
#endif
return;
}
fwrite(&num_students, sizeof(int), 1, fp);
fwrite(students, sizeof(Student), num_students, fp);
fclose(fp);
printf("学生信息已保存到文件中\n");
}
// 从文件中加载学生信息
void load_students() {
FILE *fp = fopen(FILE_NAME, "rb");
if (fp == NULL) {
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED);
#endif
printf("未找到学生信息文件!\n");
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN);
#endif
return;
}
fread(&num_students, sizeof(int), 1, fp);
fread(students, sizeof(Student), num_students, fp);
fclose(fp);
printf("学生信息已从文件中加载\n");
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN);
printf("--------------------\n");
SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN);
#endif
}
// 输入学生信息
void input_student() {
printf("请输入学号(数字):");
int id;
scanf("%d", &id);
// 检查学号是否已存在
for (int i = 0; i < num_students; i++) {
if (students[i].id == id) {
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED);
#endif
printf("学号已存在\n");
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN);
#endif
return;
}
}
// 创建新学生
Student student;
student.id = id;
printf("请输入姓名:");
scanf("%s", student.name);
printf("请输入性别:");
scanf("%s", student.sex);
printf("请输入家庭住址:");
scanf("%s", student.address);
printf("请输入联系电话:");
scanf("%s", student.phone);
students[num_students] = student;
num_students++;
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED);
#endif
printf("学生信息已成功添加\n");
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN);
#endif
}
// 修改学生信息
void modify_student() {
printf("请输入要修改的学号(数字):");
int id;
scanf("%d", &id);
int index = -1;
for (int i = 0; i < num_students; i++) {
if (students[i].id == id) {
index = i;
break;
}
}
if (index == -1) {
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED);
#endif
printf("未找到该学生信息!\n");
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN);
#endif
return;
}
printf("请输入姓名(留空表示不修改):");
char name[20];
scanf("%s", name);
if (strlen(name) > 0) {
strcpy(students[index].name, name);
}
printf("请输入性别(留空表示不修改):");
char sex[5];
scanf("%s", sex);
if (strlen(sex) > 0) {
strcpy(students[index].sex, sex);
}
printf("请输入家庭住址(留空表示不修改):");
char address[50];
scanf("%s", address);
if (strlen(address) > 0) {
strcpy(students[index].address, address);
}
printf("请输入联系电话(留空表示不修改):");
char phone[20];
scanf("%s", phone);
if (strlen(phone) > 0) {
strcpy(students[index].phone, phone);
}
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED);
#endif
printf("学生信息已成功修改\n");
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN);
#endif
}
// 删除学生信息
void delete_student() {
printf("请输入要删除的学号(数字):");
int id;
scanf("%d", &id);
int index = -1;
for (int i = 0; i < num_students; i++) {
if (students[i].id == id) {
index = i;
break;
}
}
if (index == -1) {
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED);
#endif
printf("未找到该学生信息!\n");
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN);
#endif
return;
}
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED);
#endif
printf("确定要删除该学生信息吗?(y/n)");
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN);
#endif
char confirm[5];
scanf("%s", confirm);
if (strcmp(confirm, "y") != 0) {
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED);
#endif
printf("学生信息未被删除\n");
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN);
#endif
return;
}
for (int i = index; i < num_students - 1; i++) {
students[i] = students[i + 1];
}
num_students--;
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED);
#endif
printf("学生信息已成功删除\n");
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN);
#endif
}
// 查询学生信息
void search_student() {
printf("请输入查询条件:");
char condition[20];
scanf("%s", condition);
int found = 0;
for (int i = 0; i < num_students; i++) {
if (strcmp(students[i].name, condition) == 0 ||
strcmp(students[i].sex, condition) == 0 ||
strcmp(students[i].address, condition) == 0 ||
strcmp(students[i].phone, condition) == 0 ||
students[i].id == atoi(condition)) {
print_student(students[i]);
found = 1;
}
}
if (!found) {
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED);
#endif
printf("未找到符合条件的学生信息!\n");
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN);
#endif
}
}
// 输入学生成绩
void input_scores() {
for (int i = 0; i < num_students; i++) {
printf("请输入学号为 %d 的学生成绩:\n", students[i].id);
printf("语文:");
scanf("%f", &students[i].chinese);
printf("数学:");
scanf("%f", &students[i].math);
printf("外语:");
scanf("%f", &students[i].english);
calculate_score(i);
}
calculate_rank();
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED);
#endif
printf("学生成绩已成功录入\n");
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN);
#endif
}
// 计算学生成绩和名次
void calculate_score(int index) {
students[index].average = (students[index].chinese + students[index].math + students[index].english) / 3;
students[index].score = students[index].average;
}
void calculate_rank() {
for (int i = 0; i < num_students; i++) {
students[i].rank = 1;
for (int j = 0; j < num_students; j++) {
if (students[j].score > students[i].score) {
students[i].rank++;
}
}
}
}
// 输入学生测评数据
void input_evaluation() {
for (int i = 0; i < num_students; i++) {
printf("请输入学号为 %d 的学生综合测评数据:\n", students[i].id);
printf("品德成绩:");
scanf("%f", &students[i].morality);
calculate_evaluation(i);
}
calculate_eval_rank();
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED);
#endif
printf("学生测评数据已成功录入\n");
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN);
#endif
}
// 计算学生综合测评总分
void calculate_evaluation(int index) {
students[index].evaluation = students[index].score * 0.8 + students[index].morality * 0.2;
}
// 计算学生综合测评名次
void calculate_eval_rank() {
for (int i = 0; i < num_students; i++) {
students[i].eval_rank = 1;
for (int j = 0; j < num_students; j++) {
if (students[j].evaluation > students[i].evaluation) {
students[i].eval_rank++;
}
}
}
}
// 查看学生信息
void print_students() {
for (int i = 0; i < num_students; i++) {
print_student(students[i]);
}
}
// 输出单个学生信息
void print_student(Student student) {
printf("学号:%d\n", student.id);
printf("姓名:%s\n", student.name);
printf("性别:%s\n", student.sex);
printf("家庭住址:%s\n", student.address);
printf("联系电话:%s\n", student.phone);
printf("语文成绩:%.2f\n", student.chinese);
printf("数学成绩:%.2f\n", student.math);
printf("外语成绩:%.2f\n", student.english);
printf("考试平均成绩:%.2f\n", student.average);
printf("考试名次:%d\n", student.rank);
printf("品德成绩:%.2f\n", student.morality);
printf("综合测评总分:%.2f\n", student.evaluation);
printf("综合测评名次:%d\n", student.eval_rank);
// 定义一个time_t类型变量用于存储当前时间
time_t currentTime;
// 获取当前系统时间
time(¤tTime);
// 将当前时间转换为本地时间格式,并赋值给localTime变量
struct tm *localTime = localtime(¤tTime);
// 打印当前本地时间
printf("--------------------\n");
printf("查询日期: %04d-%02d-%02d", localTime->tm_year + 1900, localTime->tm_mon + 1, localTime->tm_mday);
printf(" %02d:%02d:%02d\n", localTime->tm_hour, localTime->tm_min, localTime->tm_sec);
printf("--------------------\n");
}
这次没问题了应该....
这是一个C语言编写的课程设计,实现了一个包含学生信息输入、修改、删除、查询等功能的系统。系统考虑了考试平均成绩和品德成绩对学生综合测评的影响,并能进行数据的保存和加载。代码已经包含了基本功能,但仍有改进空间,例如增加成绩等级划分和账户密码设置。
2175

被折叠的 条评论
为什么被折叠?



