怎么用C语言编一个学生成绩记录簿?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么用C语言编一个学生成绩记录簿?相关的知识,希望对你有一定的参考价值。
学生成绩记录簿设计
编制一个C语言成绩记录簿,每个学生信息包括:学号、姓名、C语言成绩。具体功能:
(1)创建一个文本文件用来记录学生信息,输入至少30名学生的信息,保存在文本文件中;
(2)将文本文件中的数据读出,按学号或姓名查询成绩;
(3)能添加成绩记录;
(4)能修改指定姓名或学号的学生的成绩;
(5)显示输出60分以下、60~79、80~89、90分以上各分数段的学生信息,显示及格率和平均分,显示最高分和最低分,显示所有学生的排名(不能改变学生的学号顺序);
(6)以上信息能保存在原文本文件中。
要符合上述要求,不要是乱码,各位大神帮帮忙吧
#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语言程序编输入一个学生的成绩,若成绩大于等于60提示成绩合格,否则提示需要努力学习的程序?