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

Python023

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

#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->lengthj >ij--)

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 = 0i <L.lengthi++)

{

printf("%d\t", i+1)

printStudentInfo(L.arr[i])

}

}

void printSeqList(SeqList L)

{

for(int i = 0i <L.lengthi++)

printStudentInfo(L.arr[i])

}

int queryInfoById(SeqList L, char *id)

{

for(int i = 0i <L.lengthi++)

if(strcmp(id, L.arr[i].id)==0)

return i

return -1

}

int queryInfoByName(SeqList L, char *name)

{

for(int i = 0i <L.lengthi++)

if(strcmp(name, L.arr[i].name)==0)

return i

return -1

}

void save2File(SeqList L)

{

fp = fopen(filePath, "w")

for (int i = 0i <L.lengthi++)

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 = 1j <L->lengthj++)

{

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 = 0i <4i++)

initSeqList(&sectionListArr[i])

float sum = 0, average, passedRate

for (int i = 0i <L.lengthi++)

{

int score = L.arr[i].score

sum += score

if(score <60)

insertSeqList(&sectionListArr[0], sectionListArr[0].length, L.arr[i])

else if(score >= 60 &&score <80)

insertSeqList(&sectionListArr[1], sectionListArr[1].length, L.arr[i])

else if(score >= 80 &&score <90)

insertSeqList(&sectionListArr[2], sectionListArr[2].length, L.arr[i])

else insertSeqList(&sectionListArr[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

}

#include <stdio.h>

int main()

{

float score[2][2] = {0}

for (int i = 0 i < 2 i++)

{

for (int j = 0 j < 2 j++)

{

scanf("%f", &score[i][j])

}

}

printf("----------------------\n")

printf("序号语文  数学  总成绩\n")

printf("----------------------\n")

for (int i = 0 i < 2 i++)

{

printf("%-4d%-6.1f%-6.1f%6.1f\n", i + 1, score[i][0], score[i][1], score[i][0] + score[i][1])

}

return 0

}

//测试输出:

//80.0

//90.5

//90.5

//70.5

//----------------------

//序号语文  数学  总成绩

//----------------------

//1   80.0  90.5   170.5

//2   90.5  70.5   161.0