#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 {
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