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

Python014

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

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#define MAX 1000

/*定义学生成绩信息结构*/

struct stu

{

char id[8]

char name[8]

扩展资料:

short:修饰int,短整型数据,可省略被修饰的int。(K&R时期引入)

long:修饰int,长整型数据,可省略被修饰的int。(K&R时期引入)

long long:修饰int,超长整型数据,可省略被修饰的int。(C99标准新增)

signed:修饰整型数据,有符号数据类型。(C89标准新增)

unsigned:修饰整型数据,无符号数据类型。(K&R时期引入)

restrict:用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式。(C99标准新增)

复杂类型关键字

struct:结构体声明。(K&R时期引入)

union:联合体声明。(K&R时期引入)

enum:枚举声明。(C89标准新增)

typedef:声明类型别名。(K&R时期引入)

sizeof:得到特定类型或特定类型变量的大小。(K&R时期引入)

inline:内联函数用于取代宏定义,会在任何调用它的地方展开。(C99标准新增)

参考资料来源:百度百科-c语言

#include "stdio.h"

/*定义学生结构体*/

struct Student

{

char ID[20]

char Name[20]

float Mark1

float Mark2

float Mark3

float Average

}

/*声明学生数组及学生数量*/

struct Student students[1000]

int num=0

/*求平均值*/

float Avg(struct Student stu)

{

return (stu.Mark1+stu.Mark2+stu.Mark3)/3

}

/*通过学号返回数组下标*/

int Student_SearchByIndex(char id[])

{

int i

for (i=0i<numi++)

{

if (strcmp(students[i].ID,id)==0)

{

return i

}

}

return -1

}

/*通过姓名返回数组下标*/

int Student_SearchByName(char name[])

{

int i

for (i=0i<numi++)

{

if (strcmp(students[i].Name,name)==0)

{

return i

}

}

return -1

}

/*显示单条学生记录*/

void Student_DisplaySingle(int index)

{

printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩")

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

printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[index].ID,students[index].Name,

students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Average)

}

/*插入学生信息*/

void Student_Insert()

{

while(1)

{

printf("请输入学号:")

scanf("%s",&students[num].ID)

getchar()

printf("请输入姓名:")

scanf("%s",&students[num].Name)

getchar()

printf("请输入成绩:")

scanf("%f",&students[num].Mark1)

getchar()

printf("请输入成绩:")

scanf("%f",&students[num].Mark2)

getchar()

printf("请输入成绩:")

scanf("%f",&students[num].Mark3)

getchar()

students[num].Average=Avg(students[num])

num++

printf("是否继续?(y/n)")

if (getchar()=='n')

{

break

}

}

}

/*修改学生信息*/

void Student_Modify()

{

float mark1,mark2,mark3

while(1)

{

char id[20]

int index

printf("请输入要修改的学生的学号:")

scanf("%s",&id)

getchar()

index=Student_SearchByIndex(id)

if (index==-1)

{

printf("学生不存在!\n")

}

else

{

printf("你要修改的学生信息为:\n")

Student_DisplaySingle(index)

printf("-- 请输入新值--\n")

printf("请输入学号:")

scanf("%s",&students[index].ID)

getchar()

printf("请输入姓名:")

scanf("%s",&students[index].Name)

getchar()

printf("请输入成绩:")

scanf("%f",&students[index].Mark1)

getchar()

printf("请输入成绩:")

scanf("%f",&students[index].Mark2)

getchar()

printf("请输入成绩:")

scanf("%f",&students[index].Mark3)

getchar()

students[index].Average=Avg(students[index])

}

printf("是否继续?(y/n)")

if (getchar()=='n')

{

break

}

}

}

/*删除学生信息*/

void Student_Delete()

{

int i

while(1)

{

char id[20]

int index

printf("请输入要删除的学生的学号:")

scanf("%s",&id)

getchar()

index=Student_SearchByIndex(id)

if (index==-1)

{

printf("学生不存在!\n")

}

else

{

printf("你要删除的学生信息为:\n")

Student_DisplaySingle(index)

printf("是否真的要删除?(y/n)")

if (getchar()=='y')

{

for (i=indexi<num-1i++)

{

students[i]=students[i+1]

}

num--

}

getchar()

}

printf("是否继续?(y/n)")

if (getchar()=='n')

{

break

}

}

}

/*按姓名查询*/

void Student_Select()

{

while(1)

{

char name[20]

int index

printf("请输入要查询的学生的姓名:")

scanf("%s",&name)

getchar()

index=Student_SearchByName(name)

if (index==-1)

{

printf("学生不存在!\n")

}

else

{

printf("你要查询的学生信息为:\n")

Student_DisplaySingle(index)

}

printf("是否继续?(y/n)")

if (getchar()=='n')

{

break

}

}

}

/*按平均值排序*/

void Student_SortByAverage()

{

int i,j

struct Student tmp

for (i=0i<numi++)

{

for (j=1j<num-ij++)

{

if (students[j-1].Average<students[j].Average)

{

tmp=students[j-1]

students[j-1]=students[j]

students[j]=tmp

}

}

}

}

/*显示学生信息*/

void Student_Display()

{

int i

printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩")

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

for (i=0i<numi++)

{

printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[i].ID,students[i].Name,

students[i].Mark1,students[i].Mark2,students[i].Mark3,students[i].Average)

}

}

/*将学生信息从文件读出*/

void IO_ReadInfo()

{

FILE *fp

int i

if ((fp=fopen("Database.txt","rb"))==NULL)

{

printf("不能打开文件!\n")

return

}

if (fread(&num,sizeof(int),1,fp)!=1)

{

num=-1

}

else

{

for(i=0i<numi++)

{

fread(&students[i],sizeof(struct Student),1,fp)

}

}

fclose(fp)

}

/*将学生信息写入文件*/

void IO_WriteInfo()

{

FILE *fp

int i

if ((fp=fopen("Database.txt","wb"))==NULL)

{

printf("不能打开文件!\n")

return

}

if (fwrite(&num,sizeof(int),1,fp)!=1)

{

printf("写入文件错误!\n")

}

for (i=0i<numi++)

{

if (fwrite(&students[i],sizeof(struct Student),1,fp)!=1)

{

printf("写入文件错误!\n")

}

}

fclose(fp)

}

/*主程序*/

main()

{

int choice

IO_ReadInfo()

while(1)

{

/*主菜单*/

printf("\n------ 学生成绩管理系统------\n")

printf("1. 增加学生记录\n")

printf("2. 修改学生记录\n")

printf("3. 删除学生记录\n")

printf("4. 按姓名查询学生记录\n")

printf("5. 按平均成绩排序\n")

printf("6. 退出\n")

printf("请选择(1-6):")

scanf("%d",&choice)

getchar()

switch(choice)

{

case 1:

Student_Insert()

break

case 2:

Student_Modify()

break

case 3:

Student_Delete()

break

case 4:

Student_Select()

break

case 5:

Student_SortByAverage()

Student_Display()

break

case 6:

exit()

break

}

IO_WriteInfo()

}

}