怎么用C语言编一个学生成绩记录簿?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么用C语言编一个学生成绩记录簿?相关的知识,希望对你有一定的参考价值。

学生成绩记录簿设计
编制一个C语言成绩记录簿,每个学生信息包括:学号、姓名、C语言成绩。具体功能:
(1)创建一个文本文件用来记录学生信息,输入至少30名学生的信息,保存在文本文件中;
(2)将文本文件中的数据读出,按学号或姓名查询成绩;
(3)能添加成绩记录;
(4)能修改指定姓名或学号的学生的成绩;
(5)显示输出60分以下、60~79、80~89、90分以上各分数段的学生信息,显示及格率和平均分,显示最高分和最低分,显示所有学生的排名(不能改变学生的学号顺序);
(6)以上信息能保存在原文本文件中。
要符合上述要求,不要是乱码,各位大神帮帮忙吧

参考技术A #include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct

char id[15];
char name[10];
int score;
StudentInfo;
typedef struct

StudentInfo arr[100];
int length;
SeqList;
FILE *fp;
char *filePath = "C:/StudentInfo.txt";
void initSeqList(SeqList *L)

L->length = 0;

void insertSeqList(SeqList *L, int i, StudentInfo info)å

int j;
for(j = L->length; j > i; j--)
L->arr[j] = L->arr[j-1];
L->arr[j] = info;
L->length++;

void printStudentInfo(StudentInfo info)

printf("%s\t%s\t%d\n", info.id, info.name, info.score);

void printSeqListWithSeqNo(SeqList L)

for(int i = 0; i < L.length; i++)

printf("%d\t", i+1);
printStudentInfo(L.arr[i]);


void printSeqList(SeqList L)

for(int i = 0; i < L.length; i++)
printStudentInfo(L.arr[i]);

int queryInfoById(SeqList L, char *id)

for(int i = 0; i < L.length; i++)
if(strcmp(id, L.arr[i].id)==0)
return i;
return -1;

int queryInfoByName(SeqList L, char *name)

for(int i = 0; i < L.length; i++)
if(strcmp(name, L.arr[i].name)==0)
return i;
return -1;

void save2File(SeqList L)

fp = fopen(filePath, "w");
for (int i = 0; i < L.length; i++)
fprintf(fp, "%s\t%s\t%d\n", L.arr[i].id, L.arr[i].name, L.arr[i].score);

void showMenu(SeqList L);

void addInfo(SeqList L)

StudentInfo info;
int index;
do
printf("请输入学号:");
scanf("%s", info.id);
index = queryInfoById(L, info.id);
if (index != -1)

printf("输入的学号已存在。\n");
printStudentInfo(L.arr[index]);

while(index != -1);
do
printf("请输入姓名:");
scanf("%s", info.name);
index = queryInfoByName(L, info.name);
if(index != -1)

printf("输入的姓名已存在。\n");
printStudentInfo(L.arr[index]);

while(index != -1);
printf("请输入成绩:");
scanf("%d", &info.score);
L.arr[L.length] = info;
L.length++;
save2File(L);


void editInfo(SeqList L)

StudentInfo info;
char choice;
printf("1. 按学号修改\n2. 按姓名修改\n3. 返回上一层\n");
while((choice=getchar())=='\n');
int index;
if(choice == '1' || choice == '2')

if(choice == '1')

printf("请输入学号:");
scanf("%s", info.id);
index = queryInfoById(L, info.id);
else
printf("请输入姓名:");
scanf("%s", info.name);
index = queryInfoByName(L, info.name);

if(index != -1)
printStudentInfo(L.arr[index]);
else
printf("%s 为 %s 的学生不存在\n", choice==1?"学号":"姓名", choice==1?info.id:info.name);
editInfo(L);
return;

printf("成绩改为:");
scanf("%d", &L.arr[index].score);
save2File(L);
else if(choice == '3')
showMenu(L);
else
printf("选择有误,请重新选择\n");
editInfo(L);
return;



void insertSort(SeqList *L)

for(int j = 1; j < L->length; j++)

StudentInfo key = L->arr[j];
int i = j - 1;
while(i >= 0 && L->arr[i].score < key.score)

L->arr[i+1] = L->arr[i];
i--;

L->arr[i+1] = key;


void statisticInfo(SeqList L)

// 显示 60 分以下、60~79、80~89、90 分以上各分数段的学生信息
SeqList sectionListArr[4];
for (int i = 0; i < 4; i++)
initSeqList(§ionListArr[i]);
float sum = 0, average, passedRate;
for (int i = 0; i < L.length; i++)

int score = L.arr[i].score;
sum += score;
if(score < 60)
insertSeqList(§ionListArr[0], sectionListArr[0].length, L.arr[i]);
else if(score >= 60 && score < 80)
insertSeqList(§ionListArr[1], sectionListArr[1].length, L.arr[i]);
else if(score >= 80 && score < 90)
insertSeqList(§ionListArr[2], sectionListArr[2].length, L.arr[i]);
else insertSeqList(§ionListArr[3], sectionListArr[3].length, L.arr[i]);

average = sum/L.length;
passedRate = (L.length-sectionListArr[0].length)*100.0/L.length;
insertSort(&L);
printf("60 分以下的学生:\n");
printSeqList(sectionListArr[0]);
printf("\n60 ~ 79 分的学生:\n");
printSeqList(sectionListArr[1]);
printf("\n80 ~ 89 分的学生:\n");
printSeqList(sectionListArr[2]);
printf("\n90 分以上的学生:\n");
printSeqList(sectionListArr[3]);
printf("\n及格率:%.1f %%\n平均分:%.1f\n", passedRate, average);
printf("按顺序从高到低排序:\n");
insertSort(&L);
printSeqListWithSeqNo(L);
printf("\n最高分:\n");
printStudentInfo(L.arr[0]);
printf("\n最低分:\n");
printStudentInfo(L.arr[L.length-1]);



void queryInfo(SeqList L)

char choice;
printf("1. 按学号查询\n2. 按姓名查询\n3. 返回上层\n");
while((choice=getchar())=='\n');
int index;
if (choice == '1')

char id[15];
printf("请输入学号:");
scanf("%s", id);
index = queryInfoById(L, id);
else if(choice == '2')
char name[10];
printf("请输入姓名:");
scanf("%s", name);
index = queryInfoByName(L,name);
else if(choice == '3')
showMenu(L);
return;
else
printf("选择有误,请重新选择\n");
queryInfo(L);
return;

if(index == -1)
printf("没有查询到结果\n");
else
printStudentInfo(L.arr[index]);


void showMenu(SeqList L)

char choice;
printf("\n1. 查询\n2. 添加成绩\n3. 修改成绩\n4. 统计分析\n5. 退出\n");
while((choice = getchar()) == '\n');
switch(choice)

case '1': queryInfo(L); break;
case '2': addInfo(L); break;
case '3': editInfo(L); break;
case '4': statisticInfo(L); break;
case '5': exit(0);


int main(void)

StudentInfo temp;
SeqList *L = (SeqList*)malloc(sizeof(SeqList));
do
initSeqList(L);
fp = fopen(filePath, "r");
int i = 0;
while(fscanf(fp, "%s%s%d", temp.id, temp.name, &temp.score) != EOF)
insertSeqList(L, i++, temp);
showMenu(*L);
fclose(fp);
while(1);
return 0;

编一个程序,首先输入一个成绩(0-100),然后用if else语句判断该成绩是优、良、中、及格还是不及格。

这个程序我调试过,没问题,放心用吧!
#include <stdio.h>
#define N 10
void main()

int n;//循环参数
int i,j,k,m;//分别用来记录成绩优秀,良好,及格和不及格的人数
i=0;
j=0;
k=0;
m=0;//初始化
for(n=0;n<=N;n++)

double grade;
printf("请输入您的成绩: \n");
scanf("%lf",&grade);
if(grade>=90)

i++;
printf("恭喜!您成绩优秀");

else if(grade>=80)

j++;
printf("您成绩良好!");

else if(grade>=60)

k++;
printf("您及格了!");

else if(grade<60)

m++;
printf("请再接再厉!您没有及格!");


printf("成绩优秀,良好,及格,不及格的人数:\n");
printf("%d\n,%d\n,%d\n,%d\n",i,j,k,m);

应该满足你的要求吧!
参考技术A double grade ;
if(grade >= 90)
// 优
else if(grade >=80)
// 良
else if(grade >=70)
// 中
else if(grade >=60)
//及格
else
//不及格
参考技术B #include <stdio.h>

int main( void )

double dNum,dZero=-0.00001 ;

printf( "input num:" );
scanf( "%lf" , &dNum );

if ( (dNum-90) >= dZero )

printf("优!\n" );

else
if ( (dNum-80) >= dZero )

printf("良!\n" );

else
if ( (dNum-70) >= dZero )

printf("中!\n" );

else
if ( (dNum-60) >= dZero )

printf("及格\n" );

else
printf("不及格\n" );
return 0;
本回答被提问者和网友采纳

以上是关于怎么用C语言编一个学生成绩记录簿?的主要内容,如果未能解决你的问题,请参考以下文章

用C语言设计一个学生成绩管理系统

C语言(学生成绩管理系统)

怎样用C语言程序编输入一个学生的成绩,若成绩大于等于60提示成绩合格,否则提示需要努力学习的程序?

用C语言写学生成绩管理系统基本功能:1、 输入一个班级的学生基本信息(包括学号,姓名,性别,5门课程成绩

C语言链表问题,作业编程。编好出现问题。高手看下。

C语言学生成绩管理系统 怎么用文件排序