C语言程序设计之学生选修课程管理系统。

C语言程序设计之学生选修课程管理系统。,第1张

#include <stdio.h>

#include <stdlib.h>

#include <string.h>struct student

{

char name[60]

char ID[7]

int score

}int dq(struct student st[])

void xianshi()

void bc(struct student st[])

void add()

void select()

void zz()

void chazhao()

void xhcz()

void xmcz()

void del()

void xmsc()

void xhsc()

void tj()

void px()

void bjg()

void xg()

void xhxg()

void xmxg()

void bca()

void fh()

struct student st[300] //这个数组用来保存所有的学生信息 和文件里面的一致

int Number=0//记录总的学生人数 也就是数组/文件里面的学生人数

void main()

{

int choose=0

FILE *fp=NULL

char yesorno

if((fp=fopen("C://student.dat","rb"))==NULL)

{

printf("\n=========>提示:文件不存在,是否要创建一个?(y/n)\n")

scanf("%c",&yesorno)

if(yesorno=='y'||yesorno=='Y')

{

//这里仅为了建立文件

fp=fopen("C://student.dat","wb")

fclose(fp)

}

else

exit(0)

}

else

{

Number=dq(st)//要是文件只能够已经有数据 将数据初始化到数组中

}

system("cls")

while(true)

{

xianshi()

printf("\t\t====>请选择:")

scanf("%d",&choose)

system("cls")

switch(choose)

{

case 0: exit(0)

//退出

break

case 1: add()

fh()//增加学生成绩

break

case 2: select()

fh()//查看学生成绩

break

case 3: chazhao()

fh()// 查找

break

case 4: del()

fh()//删除

break

case 5: tj()

fh()//统计

break

case 6: px()

fh()//排序

break

case 7: bjg()

fh()//输出不及格

break

case 8: xg()

fh()//修改

break

case 9:zz()

fh()//作者

break

case 10:bca()

fh()//保存

break

default:

break

}

fflush(stdin)

getchar()

system("cls")

}

}

void bca()

{

printf("\t=====程序在运行时已自动保存.....\n")

}

void fh()

{

printf("\t===>按Enter键返回主菜单\n")

}

void xg() //修改学生信息

{

int way=0

printf("请选择修改查找方式\n")

printf("1 按姓名查找修改\n")

printf("2 按学号查找修改\n")

scanf("%d",&way)

switch(way)

{

case 1: xmxg()

break

case 2: xhxg()

break

default: printf("输入有误,结束!\n")

break

}

}

//按姓名修改

void xmxg()

{

FILE *fp=NULL

char name[60]

int i=0

int changeIndex=0

int index=0

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

scanf("%s",name)

for (i=0i<Numberi++)

{

if (strcmp(name,st[i].name))

{

changeIndex=i //保存要修改的人的下标

}

break

}

printf("\t姓名\t学号\t成绩\n")

printf("\t%s\t%s\t%d\n\n",st[changeIndex].name,st[changeIndex].ID,st[changeIndex].score)

printf("请重新输入该学生信息")

printf("姓名:")

scanf("%s",st[changeIndex].name)

printf("学号:")

scanf("%s",st[changeIndex].ID)

printf("成绩:")

scanf("%d",&st[changeIndex].score)//信息修改后重新更新文件里面的数据 以保持数据一致性

fp=fopen("C://student.dat","wb")

for (i=0i<Numberi++)

{

fwrite(&st[i],sizeof(struct student),1,fp)

}

fclose(fp)

}

void xhxg()//按学号修改

{

FILE *fp=NULL

char id[60]

int i=0

int changeIndex=0

int index=0

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

scanf("%s",id)

for (i=0i<Numberi++)

{

if (strcmp(id,st[i].ID))

{

changeIndex=i //保存要修改的人的下标

}

break

}

printf("\t姓名\t学号\t成绩\n")

printf("\t%s\t%s\t%d\n\n",st[changeIndex].name,st[changeIndex].ID,st[changeIndex].score)

printf("请重新输入该学生信息")

printf("姓名:")

scanf("%s",st[changeIndex].name)

printf("学号:")

scanf("%s",st[changeIndex].ID)

printf("成绩:")

scanf("%d",&st[changeIndex].score)

//信息修改后重新更新文件里面的数据 以保持数据一致性

fp=fopen("C://student.dat","wb")

for (i=0i<Numberi++)

{

fwrite(&st[i],sizeof(struct student),1,fp)

}

fclose(fp)

printf("\t=======>修改成功\n")

}void bjg() //输出不及格人数

{

int i=0

printf("以下是不及格:\n")

printf("\t姓名\t学号\t成绩\n")

for (i=0i<Numberi++)

{

if (st[i].score<60)

{

printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score)

}

}

}

void px()//排序

{

struct student temp

int wantNUmber=0

int i=0

int j=0

for(i=0i<Number-1i++)

{

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

{

if(st[j].score>st[j+1].score)

{

temp=st[j]

st[j]=st[j+1]

st[j+1]=temp

}

}

}

printf("你想输出前几名的成绩:")

scanf("%d",&wantNUmber)

if (wantNUmber>Number)

{

wantNUmber=Number

}printf("\t姓名\t学号\t成绩\n")

for(i=0i<wantNUmberi++)

{

printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score)

}

}

void tj()//统计

{

int i=0

double sum=0.0

for(i=0i<Numberi++)

{

sum+=st[i].score

}

printf("全班总分为:%f\n",sum)

printf("平均分为:%f\n",sum/Number)

}

void del()//删除

{

int n=0

printf("1 按姓名删除\n")

printf("2 按学号删除\n")

scanf("%d",&n)

switch(n)

{

case 1: xmsc()

break

case 2: xhsc()

break

}

}

void xmsc()//按姓名删除

{

FILE *fp=NULL

char name[60]

int i=0

int j=0

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

scanf("%s",name)

for(i=0i<Numberi++)

{

if (strcmp(name,st[i].name)==0) //如果查找到就删除

{

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

{

st[j]=st[j+1]

}

Number--

}

} //将剩余数据写入文件 重新一写的方式打开文件 把以前的数据擦除了

fp=fopen("C://student.dat","wb")

for (i=0i<Numberi++)

{

fwrite(&st[i],sizeof(struct student),1,fp)

}

fclose(fp)

printf("删除成功\n")

}

void xhsc()//按学号删除

{

FILE *fp=NULL

char id[60]

int i=0

int j=0

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

scanf("%s",id)

for(i=0i<Numberi++)

{

if (strcmp(id,st[i].ID)==0) //如果查找到就删除

{

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

{

st[j]=st[j+1]

}

Number--

}

}

//将剩余数据写入文件 重新一写的方式打开文件 把以前的数据擦除了

fp=fopen("C://student.dat","wb")

for (i=0i<Numberi++)

{

fwrite(&st[i],sizeof(struct student),1,fp)

}

fclose(fp)

printf("删除成功\n")

}

void chazhao()//查找学生

{

int n=0

printf("1 按姓名查找\n")

printf("2 按学号查找\n")

scanf("%d",&n)

switch(n)

{

case 1: xmcz()

break

case 2: xhcz()

break

default: printf("输入有误,结束!\n")

break

}

}

void xhcz()//按学号查找

{

char id[7]

int i=0

printf("请输入要查找学生学号:")

scanf("%s",id)

system("cls")

printf("\t姓名\t学号\t成绩\n")

for (i=0i<Numberi++)

{

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

{

printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score)

}

}

}

void xmcz()//按姓名查找

{

char name[7]

int i=0

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

scanf("%s",name)

system("cls")

printf("\t姓名\t学号\t成绩\n")

for (i=0i<Numberi++)

{

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

{

printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score)

}

}

}

void zz()

{

printf("\t**********************************************************\n\n")

printf("\t^^^^^^^^^^ 武汉工程大学邮电与信息工程学院 ^^^^^^^^^^\n\n")

printf("\t^^^^^^^^^ 07网络与安全管理2班 ^^^^^^^^^\n\n")

printf("\t^^^^^^^^ 易樊制作 ^^^^^^^^\n\n")

printf("\t^^^^^^^^^ 禁止CTRL+C谢谢合作^^^^^^^^^\n\n")

printf("\t^^^^^^^^^^QQ:895115828\n\n")

printf("\t**********************************************************\n\n")

}

void select()//查看学生

{

int i=0

printf("以下是全部学生成绩\n")

printf("\t姓名\t学号\t成绩\n")

for(i=0i<Numberi++)

{

printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score)

}

}

void add()//增加学生

{

int numberTemp=0

int i=0

struct student temp//临时保存信息

printf("请输入要增加学生成绩个数:")

scanf("%d",&numberTemp)

for(i=0i<numberTempi++)

{

printf("输入第%d个同学信息\n",i+1)

printf("姓名:")

scanf("%s",temp.name)

printf("学号:")

scanf("%s",temp.ID)

printf("成绩:")

scanf("%d",&temp.score)

st[Number++]=temp//将刚添加的写入到数组

bc(&temp)//将刚添加的写入到文件 }

printf("添加成功\n")

}

void bc(struct student *st)

{

FILE *fp=NULL

fp=fopen("C://student.dat","ab+")

fwrite(st,sizeof(struct student),1,fp)

fclose(fp)

}

int dq(struct student st[])

{

FILE *fp=NULL

int i=0

fp=fopen("C://student.dat","rb")

while(fread(&st[i],sizeof(struct student),1,fp))

i++

fclose(fp)

return i

}

void xianshi()

{

printf("\t*****************************************************************\n")

printf("\t* *\n")

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

printf("\t* *\n")

printf("\t* [1]增加学生成绩[2]查看学生成绩 *\n")

printf("\t* [3]查找学生成绩[4]删除学生成绩 *\n")

printf("\t* [5]统计(总成绩和平均分) [6]输出前N名学生成绩 *\n")

printf("\t* [7]输出不及格人数 [8]修改学生信息 *\n")

printf("\t* [9]关于作者[10] 保存数据 *\n")

printf("\t* [0]退出系统 *\n")

printf("\t*****************************************************************\n")

}运行成功,请你下去后慢慢研究下这个程序,很简单的,祝你成功!~

#include <stdio.h>

#include <stdlib.h>

#include <string.h>struct student

{

char name[60]

char ID[7]

int score

}int dq(struct student st[])

void xianshi()

void bc(struct student st[])

void add()

void select()

void zz()

void chazhao()

void xhcz()

void xmcz()

void del()

void xmsc()

void xhsc()

void tj()

void px()

void bjg()

void xg()

void xhxg()

void xmxg()

void bca()

void fh()

struct student st[300] //这个数组用来保存所有的学生信息 和文件里面的一致

int Number=0//记录总的学生人数 也就是数组/文件里面的学生人数

void main()

{

int choose=0

FILE *fp=NULL

char yesorno

if((fp=fopen("C://student.dat","rb"))==NULL)

{

printf("\n=========>提示:文件不存在,是否要创建一个?(y/n)\n")

scanf("%c",&yesorno)

if(yesorno=='y'||yesorno=='Y')

{

//这里仅为了建立文件

fp=fopen("C://student.dat","wb")

fclose(fp)

}

else

exit(0)

}

else

{

Number=dq(st)//要是文件只能够已经有数据 将数据初始化到数组中

}

system("cls")

while(true)

{

xianshi()

printf("\t\t====>请选择:")

scanf("%d",&choose)

system("cls")

switch(choose)

{

case 0: exit(0)

//退出

break

case 1: add()

fh()//增加学生成绩

break

case 2: select()

fh()//查看学生成绩

break

case 3: chazhao()

fh()// 查找

break

case 4: del()

fh()//删除

break

case 5: tj()

fh()//统计

break

case 6: px()

fh()//排序

break

case 7: bjg()

fh()//输出不及格

break

case 8: xg()

fh()//修改

break

case 9:zz()

fh()//作者

break

case 10:bca()

fh()//保存

break

default:

break

}

fflush(stdin)

getchar()

system("cls")

}

}

void bca()

{

printf("\t=====程序在运行时已自动保存.....\n")

}

void fh()

{

printf("\t===>按Enter键返回主菜单\n")

}

void xg() //修改学生信息

{

int way=0

printf("请选择修改查找方式\n")

printf("1 按姓名查找修改\n")

printf("2 按学号查找修改\n")

scanf("%d",&way)

switch(way)

{

case 1: xmxg()

break

case 2: xhxg()

break

default: printf("输入有误,结束!\n")

break

}

}

//按姓名修改

void xmxg()

{

FILE *fp=NULL

char name[60]

int i=0

int changeIndex=0

int index=0

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

scanf("%s",name)

for (i=0i<Numberi++)

{

if (strcmp(name,st[i].name))

{

changeIndex=i //保存要修改的人的下标

}

break

}

printf("\t姓名\t学号\t成绩\n")

printf("\t%s\t%s\t%d\n\n",st[changeIndex].name,st[changeIndex].ID,st[changeIndex].score)

printf("请重新输入该学生信息")

printf("姓名:")

scanf("%s",st[changeIndex].name)

printf("学号:")

scanf("%s",st[changeIndex].ID)

printf("成绩:")

scanf("%d",&st[changeIndex].score)//信息修改后重新更新文件里面的数据 以保持数据一致性

fp=fopen("C://student.dat","wb")

for (i=0i<Numberi++)

{

fwrite(&st[i],sizeof(struct student),1,fp)

}

fclose(fp)

}

void xhxg()//按学号修改

{

FILE *fp=NULL

char id[60]

int i=0

int changeIndex=0

int index=0

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

scanf("%s",id)

for (i=0i<Numberi++)

{

if (strcmp(id,st[i].ID))

{

changeIndex=i //保存要修改的人的下标

}

break

}

printf("\t姓名\t学号\t成绩\n")

printf("\t%s\t%s\t%d\n\n",st[changeIndex].name,st[changeIndex].ID,st[changeIndex].score)

printf("请重新输入该学生信息")

printf("姓名:")

scanf("%s",st[changeIndex].name)

printf("学号:")

scanf("%s",st[changeIndex].ID)

printf("成绩:")

scanf("%d",&st[changeIndex].score)

//信息修改后重新更新文件里面的数据 以保持数据一致性

fp=fopen("C://student.dat","wb")

for (i=0i<Numberi++)

{

fwrite(&st[i],sizeof(struct student),1,fp)

}

fclose(fp)

printf("\t=======>修改成功\n")

}void bjg() //输出不及格人数

{

int i=0

printf("以下是不及格:\n")

printf("\t姓名\t学号\t成绩\n")

for (i=0i<Numberi++)

{

if (st[i].score<60)

{

printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score)

}

}

}

void px()//排序

{

struct student temp

int wantNUmber=0

int i=0

int j=0

for(i=0i<Number-1i++)

{

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

{

if(st[j].score>st[j+1].score)

{

temp=st[j]

st[j]=st[j+1]

st[j+1]=temp

}

}

}

printf("你想输出前几名的成绩:")

scanf("%d",&wantNUmber)

if (wantNUmber>Number)

{

wantNUmber=Number

}printf("\t姓名\t学号\t成绩\n")

for(i=0i<wantNUmberi++)

{

printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score)

}

}

void tj()//统计

{

int i=0

double sum=0.0

for(i=0i<Numberi++)

{

sum+=st[i].score

}

printf("全班总分为:%f\n",sum)

printf("平均分为:%f\n",sum/Number)

}

void del()//删除

{

int n=0

printf("1 按姓名删除\n")

printf("2 按学号删除\n")

scanf("%d",&n)

switch(n)

{

case 1: xmsc()

break

case 2: xhsc()

break

}

}

void xmsc()//按姓名删除

{

FILE *fp=NULL

char name[60]

int i=0

int j=0

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

scanf("%s",name)

for(i=0i<Numberi++)

{

if (strcmp(name,st[i].name)==0) //如果查找到就删除

{

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

{

st[j]=st[j+1]

}

Number--

}

} //将剩余数据写入文件 重新一写的方式打开文件 把以前的数据擦除了

fp=fopen("C://student.dat","wb")

for (i=0i<Numberi++)

{

fwrite(&st[i],sizeof(struct student),1,fp)

}

fclose(fp)

printf("删除成功\n")

}

void xhsc()//按学号删除

{

FILE *fp=NULL

char id[60]

int i=0

int j=0

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

scanf("%s",id)

for(i=0i<Numberi++)

{

if (strcmp(id,st[i].ID)==0) //如果查找到就删除

{

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

{

st[j]=st[j+1]

}

Number--

}

}

//将剩余数据写入文件 重新一写的方式打开文件 把以前的数据擦除了

fp=fopen("C://student.dat","wb")

for (i=0i<Numberi++)

{

fwrite(&st[i],sizeof(struct student),1,fp)

}

fclose(fp)

printf("删除成功\n")

}

void chazhao()//查找学生

{

int n=0

printf("1 按姓名查找\n")

printf("2 按学号查找\n")

scanf("%d",&n)

switch(n)

{

case 1: xmcz()

break

case 2: xhcz()

break

default: printf("输入有误,结束!\n")

break

}

}

void xhcz()//按学号查找

{

char id[7]

int i=0

printf("请输入要查找学生学号:")

scanf("%s",id)

system("cls")

printf("\t姓名\t学号\t成绩\n")

for (i=0i<Numberi++)

{

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

{

printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score)

}

}

}

void xmcz()//按姓名查找

{

char name[7]

int i=0

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

scanf("%s",name)

system("cls")

printf("\t姓名\t学号\t成绩\n")

for (i=0i<Numberi++)

{

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

{

printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score)

}

}

}

void zz()

{

printf("\t**********************************************************\n\n")

printf("\t^^^^^^^^^^ 武汉工程大学邮电与信息工程学院 ^^^^^^^^^^\n\n")

printf("\t^^^^^^^^^ 07网络与安全管理2班 ^^^^^^^^^\n\n")

printf("\t^^^^^^^^ 易樊制作 ^^^^^^^^\n\n")

printf("\t^^^^^^^^^ 禁止CTRL+C谢谢合作^^^^^^^^^\n\n")

printf("\t^^^^^^^^^^QQ:895115828\n\n")

printf("\t**********************************************************\n\n")

}

void select()//查看学生

{

int i=0

printf("以下是全部学生成绩\n")

printf("\t姓名\t学号\t成绩\n")

for(i=0i<Numberi++)

{

printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score)

}

}

void add()//增加学生

{

int numberTemp=0

int i=0

struct student temp//临时保存信息

printf("请输入要增加学生成绩个数:")

scanf("%d",&numberTemp)

for(i=0i<numberTempi++)

{

printf("输入第%d个同学信息\n",i+1)

printf("姓名:")

scanf("%s",temp.name)

printf("学号:")

scanf("%s",temp.ID)

printf("成绩:")

scanf("%d",&temp.score)

st[Number++]=temp//将刚添加的写入到数组

bc(&temp)//将刚添加的写入到文件 }

printf("添加成功\n")

}

void bc(struct student *st)

{

FILE *fp=NULL

fp=fopen("C://student.dat","ab+")

fwrite(st,sizeof(struct student),1,fp)

fclose(fp)

}

int dq(struct student st[])

{

FILE *fp=NULL

int i=0

fp=fopen("C://student.dat","rb")

while(fread(&st[i],sizeof(struct student),1,fp))

i++

fclose(fp)

return i

}

void xianshi()

{

printf("\t*****************************************************************\n")

printf("\t* *\n")

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

printf("\t* *\n")

printf("\t* [1]增加学生成绩[2]查看学生成绩 *\n")

printf("\t* [3]查找学生成绩[4]删除学生成绩 *\n")

printf("\t* [5]统计(总成绩和平均分) [6]输出前N名学生成绩 *\n")

printf("\t* [7]输出不及格人数 [8]修改学生信息 *\n")

printf("\t* [9]关于作者[10] 保存数据 *\n")

printf("\t* [0]退出系统 *\n")

printf("\t*****************************************************************\n")

}运行成功,请你下去后慢慢研究下这个程序,很简单的,祝你成功!~

求采纳为满意回答。

#include <stdio.h>

#include <string.h>

int n

struct Student {

int no

char name[10]

int score[5]

int sum

int average

}student[100000]

void Sort(Student *s){

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

for(int j=i+1j<nj++){

if(s[j].sum>s[i].sum){

char ns[100]

strcpy(ns,s[i].name)

strcpy(s[i].name,s[j].name)

strcpy(s[j].name,ns)

int snum=s[i].sum,save=s[i].average

s[i].sum=s[j].sum,s[i].average=s[j].average

s[j].sum=snum,s[j].average=save

}

}

}

void printInfo() {

for (int i = 0i <ni++) {

printf("%s,%d,%d\n", student[i].name, student[i].sum, student[i].average)

}

}

int main()

{

printf("请输入学生的数量n:")

scanf("%d",&n)

for (int i = 0i <ni++) {

printf("请分别输入第%d名同学的id,名字,成绩1,成绩2,成绩3,成绩4", i + 1)

scanf("%d%s%d%d%d%d", &student[i].no, student[i].name, &student[i].score[0], &student[i].score[1], &student[i].score[2],&student[i].score[3])

student[i].sum=student[i].score[0]+student[i].score[1]+student[i].score[2]+student[i].score[3]

student[i].average=student[i].sum/4

}

Sort(student)

printInfo()

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7805801.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存