c语言实现学生管理系统

博主自创,未经允许,不得转载、

#define _CRT_SECURE_NO_DEPRECATE
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student {
int id;
char name[20];
float score[5];
};
struct student students[1000];
int num = 0;
void import_s() {
while (1) {
printf("请输入学生学号 ");
scanf("%d", &students[num].id);
getchar();
printf("请输入学生姓名 ");
scanf("%s", &students[num].name);
getchar();
printf("请输入学生c语言成绩 ");
scanf("%f", &students[num].score[0]);
getchar();
printf("请输入学生数据结构成绩 ");
scanf("%f", &students[num].score[1]);
getchar();
printf("请输入学生数学成绩 ");
scanf("%f", &students[num].score[2]);
getchar();
num++;
printf("学生所有记录输入完毕,是否还继续输入?继续输入 y,结束输入 n ");
if (getchar() != 'y'){
break;
}
}
}

float ave(student student3) {
student3.score[3] = (student3.score[0] + student3.score[1] + student3.score[2]) / 3;
return student3.score[3];
}
float sum(student student4) {
student4.score[4] = (student4.score[0] + student4.score[1] + student4.score[2]);
return student4.score[4];
}
void export_s() {
int i;
for (i = 0; i < num; i++) {
printf("学生学号%d ", students[i].id);
printf("学生姓名%s ", students[i].name);
printf("学生c语言成绩%f ", students[i].score[0]);
printf("学生数据结构成绩%f ", students[i].score[1]);
printf("学生数学成绩%f ", students[i].score[2]);
printf("学生总成绩%f ", sum(students[i]));
printf("学生平均成绩%f ", ave(students[i]));
}
}
void export_sone(int i) {
printf("学生学号%d ", students[i].id);
printf("学生姓名%s ", students[i].name);
printf("学生c语言成绩%f ", students[i].score[0]);
printf("学生数据结构成绩%f ", students[i].score[1]);
printf("学生数学成绩%f ", students[i].score[2]);
printf("学生总成绩%f ", sum(students[i]));
printf("学生平均成绩%f ", ave(students[i]));
}

void read() {
char path[40] = "C:\students.txt";
FILE *pf = fopen(path, "rb");//以读的方式打开
if (pf == NULL) {
printf("打开文件失败");
}
else {
while (!feof(pf)) {
char ch = fgetc(pf);//读取字符
putchar(ch);//输入字符
}
fclose(pf);//关闭文件指针
}

}

void save() {
char path[40] = "C:\students.txt";
FILE *pf = fopen(path, "wb");//以输出的方式打开
if (pf == NULL) {
printf("打开文件失败 ");
return;
}
if (fwrite(&num, sizeof(int), 1, pf) != 1) {
//fwrite(buffer,size,count,fp);功能:写内容到流中:
//(1)buffer:是一个指针,对fwrite来说,是要输出数据的地址。
//(2)size:要写入的字节数;
//(3)count:要进行写入size字节的数据项的个数;
//(4)fp:目标文件指针。
printf("写入文件错误! ");
}
for (int i = 0; i<num; i++)
{
if (fwrite(&students[i], sizeof(struct student), 1, pf) != 1)
{
printf("写入文件错误! ");
}
}
fclose(pf);//关闭文件指针
}
void sort(){
int i ,j;
struct student temp;
for (int k = 0; k < num;k++) {
students[k].score[3] = ave(students[k]);
}
for (i = 0; i < num;i++) {
for ( j = 1; j <= num - 1; j++) {
if (students[j-1].score[3] < students[j].score[3]) {
temp = students[j-1];
students[j-1] = students[j];
students[j] = temp;
}

}
}
printf("按平均成绩排序后成绩如下: ");
export_s();
save();
}
void delet(){
//1.读取文件 显示信息,//输入要删除的学号//读取学号匹配到数组对应位置//下标前移//重新写入文件//关闭文件
int tempid;
int flag = 0;
printf("所有学生记录如下: ");
export_s();
printf("请输入要删除的学生学号 ");
scanf("%d", &tempid);
for (int i = 0, flag = 0; i <= num; i++) {
if (tempid == students[i].id) {
flag = i;
students[flag] = students[flag + 1];
break;
}
}
//students[flag] = students[flag + 1];
num--;
char a;
printf("删除后学生记录如下,确认删除y or n ");
for (int i = 0; i < num; i++) {
printf("学生学号%d ", students[i].id);
printf("学生姓名%s ", students[i].name);
}
save();
}
void add(){
import_s();
save();
}
void amend() {
char name[20];
int flag=0;
printf("所有学生记录如下: ");
export_s();
printf("请输入要修改的学生姓名 ");
scanf("%s", &name);
for (int i = 0; i <= num; i++) {
if (strcmp(name, students[i].name) == 0) {
flag = i;
break;
}
}
while (1) {
printf("请再一次输入要修改的学生姓名确认 ");
scanf("%s", &name);
if (strcmp(name, students[flag].name) == 0) {
printf("要修改的学生信息如下: ");
export_sone(flag);
printf("-- 请输入新值-- ");
printf("请输入学号:");
scanf("%d", &students[flag].id);
getchar();
printf("请输入姓名:");
scanf("%s", &students[flag].name);
getchar();
printf("请输入学生c语言成绩 ");
scanf("%f", &students[flag].score[0]);
getchar();
printf("请输入学生数据结构成绩 ");
scanf("%f", &students[flag].score[1]);
getchar();
printf("请输入学生数学成绩 ");
scanf("%f", &students[flag].score[2]);
getchar();
students[flag].score[3] = ave(students[flag]);
students[flag].score[4] = sum(students[flag]);
printf("是否继续?(y/n)");
if (getchar() == 'n') {
break;
}
}
else{
printf("您要修改的学生信息并不存在,请先添加,谢谢! ");
break;
}

}
save();

}
void find() {
int tempid;
int flag = 0;
printf("所有学生记录如下: ");
export_s();
printf("请输入要查询的学生学号 ");
scanf("%d", &tempid);
for (int i = 0; i <= num; i++) {
if (tempid == students[i].id) {
flag = i;
break;
}
}
export_sone(flag);
save();
}
int main() {
//void (*p1)(student student1)= import_s;
//p1(student1);
//void (*p2)(student student1) = export_s;
//p2(student1);
//amend();
int choice;
while (1)
{
/*主菜单*/
printf(" ------ 学生成绩管理系统------ ");
printf("1. 增加学生记录 ");
printf("2. 修改学生记录 ");
printf("3. 删除学生记录 ");
printf("4. 按学号查询学生记录 ");
printf("5. 按平均成绩排序 ");
printf("6. 查看所有学生成绩单 ");
printf("7. 退出 ");
printf("请选择(1-6):");
scanf("%d", &choice);
getchar();
switch (choice){
case 1:
add();
break;
case 2:
amend();
break;
case 3:
delet();
break;
case 4:
find();
break;
case 5:
sort();
break;
case 6:
export_s();
break;
case 7:
exit(0);
break;
}
}
getchar();
}

原文地址:https://www.cnblogs.com/cayman/p/6101584.html