建材秒知道
登录
建材号 > 设计 > 正文

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

会撒娇的时光
清爽的康乃馨
2022-12-30 02:51:46

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

最佳答案
害怕的大白
坦率的日记本
2026-04-16 19:59:15

#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语言

最新回答
苹果绿茶
怡然的灰狼
2026-04-16 19:59:15

这个问题我在这两天已经回答了好多次了呐~~直接把我回答其它朋友的COPY给你吧!

高二的时候,我自己写过。现在在学其它的语言,就不献丑了,在网上给你找到了,是百度文库里面的,直接复制过来的话,排版不对,你自己去看一下吧,完整的代码。

http://wenku.baidu.com/view/43624a60f5335a8102d22056.html 名字就是《用C语言编写的一个学生信息管理系统》

PS:写这个,主要是用到C语言的链表,不难,只是有的时候,如果思路不清晰的话,容易写错,写漏等等,如果不参考上面,而是你自己写的话,建议先画个大概的树图出来,再开始编吧。

无辜的小馒头
勤恳的黑裤
2026-04-16 19:59:15
功能 能够实现输入记录、查询记录、更新记录、统计记录、输出记录等功能。

1. 输入记录。对每个学生的学号、姓名、班级、数学、英语、计算机成绩进行输入并存储,在程序的运行过程中,数据的存储可以采用结构体数组或者链表,但是最终应该存储在文件中。

2. 维护记录。能够实现添加、删除、修改学生记录,但是一定要将最终数据存储到文件中。

3. 查询记录。根据班级、学号、科目等查询学生的成绩。如果查询时学生数据并没有读入到结构体数组或者链表中,则应该先从文件中读出数据并存储在结构体数组或者链表中,然后在结构体数组或者链表中查询满足条件的数据。

4. 统计记录。完成对各门功课最高分和不及格人数的统计。

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

#define LEN sizeof(Student)

typedef struct student

{

int num

char name[20]

int score[4]

int sum

struct student *next

}Student

int n

Student *cin(void)

Student *sort_1(Student *head,int)

void sort_2(Student *head)

void print(Student *head)

Student *sort_all(Student *head)

void find(Student *head)

Student *add_new(Student *head)

Student *cin()

{

int flag

Student *head,*p1,*p2

n=0

head=(Student *)malloc(LEN)

p2=head

printf("\n请输入第%d名学生的学号,学号为0表示结束输入:",n+1)

scanf("%d",&flag)

while(getchar()!='\n')

for(flag)

{

n++

p1=(Student *)malloc(LEN)

p1->num=flag

printf("请输入第%d名学生的姓名:",n)

scanf("%s",p1->name)

printf("请输入第%d名学生的语文成绩:",n)

scanf("%d",&p1->score[0])

printf("请输入第%d名学生的数学成绩:",n)

scanf("%d",&p1->score[1])

printf("请输入第%d名学生的英语成绩:",n)

scanf("%d",&p1->score[2])

printf("请输入第%d名学生的计算机成绩:",n)

scanf("%d",&p1->score[3])

p1->sum=p1->score[0]+p1->score[1]+p1->score[2]+p1->score[3]

p2->next=p1

p2=p1

printf("\n请输入第%d名学生的学号,没有此学生则输入0表示结束:",n+1)

scanf("%d",&flag)

}

p2->next=NULL

printf("\n\n")

return head

}

Student *sort_all(Student *head)

{

int choose

for()

{

printf("\n\t\t# # # # # 学生成绩统计排序 # # # #\n")

printf("\t\t#\t1.按学生学号排序\t #\n")

printf("\t\t#\t2.按学生总分排序\t #\n")

printf("\t\t#\t3.按学生语文成绩排序\t #\n")

printf("\t\t#\t4.按学生数学成绩排序\t #\n")

printf("\t\t#\t5.按学生英语成绩排序\t #\n")

printf("\t\t#\t6.按学生计算机成绩排序\t #\n")

printf("\t\t#\t7.单科高分及均分\t #\n")

printf("\t\t#\t8.显示当前学生成绩\t #\n")

printf("\t\t#\t0.返回上一级菜单\t #\n")

printf("\t\t# # # # # 由himpo友情提供# # # # #\n\n")

printf("请输入你要执行的操作:")

scanf("%d",&choose)

while(getchar()!='\n')

switch(choose)

{

case 1:

case 2:

case 3:

case 4:

case 5:

case 6:head=sort_1(head,choose)break

case 7:print(head)sort_2(head)break

case 8:print(head)break

case 0:return head

default: printf("\n\n您的输入有误!请重新输入:\n\n")break

}

}

}

Student *sort_1(Student *head,int choose)

{

Student *p1,*p2=head->next,*pm,*px

Student mid

if (!p2) return head

for(p1=p2p1->next!=NULLp1=p1->next)

{

pm=p1

for(p2=p1->nextp2!=NULLp2=p2->next)

switch(choose)

{

case 1:if (pm->num>p2->num) pm=p2break

case 2:if (pm->sum<p2->sum) pm=p2break

case 3:if (pm->score[0]<p2->score[0]) pm=p2break

case 4:if (pm->score[1]<p2->score[1]) pm=p2break

case 5:if (pm->score[2]<p2->score[2]) pm=p2break

case 6:if (pm->score[3]<p2->score[3]) pm=p2break

}

if (pm!=p1)

{

mid=*pm

*pm=*p1

*p1=mid

px=pm->next

pm->next=p1->next

p1->next=px

}

}

printf("\n排序后的成绩表为:\n")

print(head)

return head

}

void sort_2(Student *head)

{

Student *p=head->next

int max_1,max_2,max_3,max_4,min_1,min_2,min_3,min_4

int max_sum,min_sum

int sum_1=0,sum_2=0,sum_3=0,sum_4=0

float aver_1,aver_2,aver_3,aver_4,aver_sum

if (!p) return

max_1=min_1=p->score[0]max_2=min_2=p->score[1]

max_3=min_3=p->score[2]max_2=min_2=p->score[3]

max_sum=min_sum=p->sum

for(pp=p->next)

{

if (max_1<p->score[0]) max_1=p->score[0]

else if (min_1>p->score[0]) min_1=p->score[0]

if (max_2<p->score[1]) max_2=p->score[1]

else if (min_2>p->score[1]) min_2=p->score[1]

if (max_3<p->score[2]) max_3=p->score[2]

else if (min_3>p->score[2]) min_3=p->score[2]

if (max_4<p->score[3]) max_4=p->score[3]

else if (min_4>p->score[3]) min_4=p->score[3]

if (max_sum<p->sum) max_sum=p->sum

else if (min_sum>p->sum) min_sum=p->sum

sum_1+=p->score[0]sum_2+=p->score[1]sum_3+=p->score[2]sum_4+=p->score[3]

}

aver_1=1.0*sum_1/naver_2=1.0*sum_2/naver_3=1.0*sum_3/naver_4=1.0*sum_4/n

aver_sum=aver_1+aver_2+aver_3+aver_4

printf("总共%d名学生,具体数据为:\n",n)

printf("语文最高分为%d,最低分为%d,平均分为%.2f\n",max_1,min_1,aver_1)

printf("数学最高分为%d,最低分为%d,平均分为%.2f\n",max_2,min_2,aver_2)

printf("英语最高分为%d,最低分为%d,平均分为%.2f\n",max_3,min_3,aver_3)

printf("计算机最高分为%d,最低分为%d,平均分为%.2f\n",max_4,min_4,aver_4)

printf("总分最高分为%d,最低分位%d,平均分为%.2f\n",

max_sum,min_sum,aver_sum)

}

void find(Student *head)

{

Student *p

int choose,fnum

char tem[20]

if (n==0) {printf("\n当前系统没有任何学生数据,您就别费劲了!\n ")return}

for()

{

printf("\n请输入您要查询学生的方式:\n\n")

printf("1、按学号查询;2、按姓名查询;0、我不查询了。\n\n")

printf("请选择:")

scanf("%d",&choose)

while(getchar()!='\n')

if (choose==1)

{

printf("\n请输入你要查询的学生的学号,输入0退出学号查询:")

scanf("%d",&fnum)

for(fnum)

{

for(p=head->nextp!=NULL&&p->num!=fnump=p->next)

if (!p)

{

printf("\n\n找不到你要查询的学号,请重新输入,输入0表示结束:")

scanf("%d",&fnum)

}

else if (p->num==fnum)

{

printf("\n学号为%d学生的数据为:\n",p->num)

printf("学号\t姓名\t语文成绩 数学成绩 英语成绩 计算机\

成绩 总分\n")

printf("%d\t%s\t %d%d%d %d \

%d\n",p->num,

p->name,p->score[0],p->score[1],p->score[2],p->score[3],

p->sum)

printf("\n\n请输入你还要查询的学生的学号,输入0表示不按学\

号查询了:")

scanf("%d",&fnum)

}

}

}

else if (choose==2)

{

printf("\n请输入你要查询的学生的姓名,输入0退出姓名查询:")

scanf("%s",tem)

for(strcmp(tem,"0"))

{

for(p=head->nextp!=NULL&&strcmp(p->name,tem)p=p->next)

if (!p)

{

printf("\n\n找不到你要查询的姓名,请重新输入,输入0表\

示结束:")

scanf("%s",tem)

}

else if (!strcmp(p->name,tem))

{

printf("\n姓名为%s学生的数据为:\n",p->name)

printf("学号\t姓名\t语文成绩 数学成绩 英语成绩 \

计算机成绩 总分\n")

printf("%d\t%s\t %d%d%d \

%d%d\n",

p->num,p->name,p->score[0],p->score[1],p->score[2],

p->score[3],p->sum)

printf("\n\n请输入你还要查询的学生的姓名,输入0表\

示不按姓名查询了:")

scanf("%s",tem)

}

}

}

else if (choose==0) {printf("\n你选择了不查询!\n")break}

else {printf("\n你以其他方式选择了不查询!\n")break}

}

}

Student *add_new(Student *head)

{

Student *p

int flag

printf("\n\n请输入你要新加入学生的学号,学号为0表示结束输入:")

scanf("%d",&flag)

while(getchar()!='\n')

for(flag)

{

p=(Student *)malloc(LEN)

p->num=flag

printf("请输入新加入学生的姓名:",n)

scanf("%s",p->name)

printf("请输入新加入学生的语文成绩:",n)

scanf("%d",&p->score[0])

printf("请输入新加入学生的数学成绩:",n)

scanf("%d",&p->score[1])

printf("请输入新加入学生的英语成绩:",n)

scanf("%d",&p->score[2])

printf("请输入第%d名学生的计算机成绩:",n)

scanf("%d",&p->score[3])

p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3]

p->next=head->next

head->next=p

n++

printf("\n请输入还要加入学生的学号,没有此学生则输入0表示结束:")

scanf("%d",&flag)

}

head=sort_1(head,1)

printf("加入后的成绩表为:\n")

print(head)

return head

}

void print(Student *head)

{

Student *p=head->next

if (!p) {printf("\n\n此系统目前没有任何学生数据!\n\n\n")return}

printf("此系统目前共计学生%d名:\n",n)

printf("**************************学生成绩统计一览************************\

*****\n")

printf("学号\t姓名\t语文成绩 数学成绩 英语成绩 计算机成绩 总分\n")

for(pp=p->next)

printf("%d\t%s\t %d%d%d %d%d\n",

p->num,p->name,

p->score[0],p->score[1],p->score[2],p->score[3],

p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3])

printf("************************此软件由himpo友情提供*************************\

*\n\n")

}

int main()

{

Student *head

int choose,i

head=(Student *)malloc(LEN)

head->next=NULL

for()

{

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

printf("\t\t*\t1.学生数据键盘录入\t *\n")

printf("\t\t*\t2.学生数据统计排序\t *\n")

printf("\t\t*\t3.查询学生数据\t\t *\n")

printf("\t\t*\t4.插入学生数据\t\t *\n")

printf("\t\t*\t5.显示当前成绩表\t *\n")

printf("\t\t*\t0.退出成绩管理系统\t *\n")

printf("\t\t* * * * * 由himpo友情提供* * * * *\n\n")

printf("\n请输入你要执行的操作:")

scanf("%d",&choose)

while(getchar()!='\n')

switch(choose)

{

case 1:printf("\n\t\t\t\t****注意****")

printf("\n\n此选项将会建立新的学生数据系统 ,原来的数据将\

不再存在,你确信要删除原来的数据并建立新的数据系统么?\n\n")

printf("1、建立新的数据系统;0、放弃建立新的数据系统。\n\n")

printf("请选择:")

scanf("%d",&i)

if (i==1) {head=cin()print(head)break}

else if (i==0)

{

printf("\n你选择了放弃建立新的数据系统!\n")

break

}

else {

printf("\n你做出别的选择,当作放弃建立!\n")

break

}

case 2:head=sort_all(head)break

case 3:find(head)break

case 4:head=add_new(head)

case 5:print(head)break

case 0:system("pause")return 0

default: printf("\n\n您的输入有误!请重新输入:\n\n")break

}

}

}

满意请采纳。

积极的宝马
内向的大船
2026-04-16 19:59:15
给你一个参考;记住学习永远是自己的,要学会自己思考,真学实用

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

struct stud_node

{

int num

char name[20]

int score

struct stud_node *next

}

struct stud_node *Create_Stu_Doc()

struct stud_node *InsertDoc(struct stud_node *head,struct stud_node *stud)

struct stud_node *DeleteDoc(struct stud_node *head,int num)

void Print_Stu_Doc(struct stud_node *head)

int main(void)

{

struct stud_node *head,*p

int choice,num,score

char name[20]

int size=sizeof(struct stud_node)

do

{

printf("1:添加 2:插入 3:删除 4:打印 0:退出\n")

scanf("%d",&choice)

switch(choice)

{

case 1:head=Create_Stu_Doc()break

case 2:printf("请输入学号,姓名和成绩:\n")

scanf("%d%s%d",&num,name,&score)

p=(struct stud_node *)malloc(size)

p->num=num

strcpy(p->name,name)

p->score=score

head=InsertDoc(head,p)

break

case 3:

printf("请输入学号:\n")

scanf("%d",&num)

head=DeleteDoc(head,num)

break

case 4:

Print_Stu_Doc(head)

break

case 0:break

}

}while(choice!=0)

return 0

}

struct stud_node *Create_Stu_Doc()

{

struct stud_node *head,*p

int num,score

char name[20]

int size=sizeof(struct stud_node)

head=NULL

printf("请输入学号,姓名和成绩:\n")

scanf("%d%s%d",&num,name,&score)

while(num!=0)

{

p=(struct stud_node*)malloc(size)

p->num=num

strcpy(p->name,name)

p->score=score

head=InsertDoc(head,p)

scanf("%d%s%d",&num,name,&score)

}

return head

}

struct stud_node *InsertDoc(struct stud_node *head,struct stud_node *stud)

{

struct stud_node *ptr,*ptr1,*ptr2

ptr2=head

ptr=stud

if(head==NULL)

{

head=ptr

head->next=NULL

}

else

{

while((ptr->num>ptr2->num)&&(ptr2->next!=NULL))

{

ptr1=ptr2

ptr2=ptr2->next

}

if(ptr->num<=ptr2->num)

{

if(head==ptr2)

head=ptr

else ptr1->next=ptr

ptr->next=ptr2

}

else

{

ptr2->next=ptr

ptr->next=NULL

}

}

return head

}

struct stud_node *DeleteDoc(struct stud_node *head,int num)

{

struct stud_node *ptr1,*ptr2

while(head!=NULL &&head->num==num)

{

ptr2=head

head=head->next

free(ptr2)

}

if(head==NULL)

return NULL

ptr1=head

ptr2=head->next

while(ptr2!=NULL)

{

if(ptr2->num==num)

{

ptr1->next=ptr2->next

free(ptr2)

}

else

ptr1=ptr2

ptr2=ptr1->next

}

return head

}

void Print_Stu_Doc(struct stud_node *head)

{

struct stud_node *ptr

if(head==NULL)

{

printf("\nNo Records\n")

return

}

printf("\nThe Students' Records Are:\n")

printf("Num\tName Score\n")

for(ptr=headptrptr=ptr->next)

printf("%8d %20s %6d\n",ptr->num,ptr->name,ptr->score)

}

含糊的裙子
想人陪的微笑
2026-04-16 19:59:15
我没写,只能和你说说怎么写。

可以由类模板和数组写。

我说说类模板的吧。

定义一个Student类存放学生信息(姓名,初始排名,各科成绩,个人总分);

初始排名由输入顺序排,在计算名字的时候就可以通过冒泡排序。

在里面定义计算总分的函数。

下面定义一个Caozuo类,用学生链表的做。你可以去找下这个例子。

数组的就很简单了,你只要想想。先定义数组(姓名,成绩),总分就是个人每科成绩的和,下面5个函数都可以通过数组遍历实现。如

cout<<"请输入你要查询的学生的名字:"<<endl

cin>>n

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

{

if(Student[i].name==n)

Student[i].Print()

}

妩媚的巨人
可靠的哈密瓜
2026-04-16 19:59:15
///////////////////以下是源程序,你稍作修改就能使用,student.txt的格式Hi我告诉你

#include <iostream>

#include <fstream>

#include <string>

const char * file = "student.txt"

using namespace std

class Student

{

public:

int Num, Age, Maths, English, Cpp, Total, Rank

string Name

char Sex

void Set(int num, string name, char sex,int age, int english, int maths, int cpp)

{

Num =num

Name =name

Sex=sex

Age=age

English=english

Maths=maths

Cpp=cpp

Total=english+maths+cpp

}

void total()

{

cout <<"The score of " <<Name <<" in total is: "

<<Maths + English + Cpp <<endl

}

void ave()

{

cout <<"The score of " <<Name <<" in average is: "

<<(Maths + English + Cpp)/3.0 <<endl

}

void display()

{

//数字设置为右对齐

cout.setf(ios_base ::right, ios_base ::adjustfield)

cout.width(3)

cout <<Num <<" "

//字符串设置为左对齐

cout.setf(ios_base ::left, ios_base ::adjustfield)

cout.width(8)

cout <<Name

cout.width(4)

cout <<Sex

//数字设置为右对齐

cout.setf(ios_base ::right, ios_base ::adjustfield)

cout.width(3)

cout<<Age

cout.width(8)

cout <<English

cout.width(6)

cout<<Maths

cout.width(4)

cout <<Cpp

cout.width(6)

cout <<Total

}

int rank() //返回名次

{ return Rank}

}stu[5]

void getdatas()

void dis_age()

void dis_course()

void dis_ave()

void dis_total()

void openfile()

void callchoice()

void dis_all()

int main()

{

cout <<"1、输入学生信息并保存到文件"<<endl

<<"2、按年龄从大到小显示学生各项信息"<<endl

<<"3、按各门成绩由高到低显示学生信息"<<endl

<<"4、输入学号计算学生平均成绩并显示"<<endl

<<"5、输入学号计算学生总成绩并显示"<<endl

<<"6、按学生总成绩排名并显示排名结果"<<endl

<<"请选择(1-6)" <<endl

callchoice()

return 0

}

void callchoice()

{

cout <<"\nPress 1-6 to select your choice, and any character to terminate:_\b"

int choice

while(cin >>choice)

{

switch (choice)

{

case 1 : getdatas() callchoice()break //接受输入并存至文件

case 2 : dis_age() callchoice()break //按年龄显示

case 3 : dis_course()callchoice()break //按单科成绩排名并显示

case 4 : dis_ave() callchoice()break //显示某位学生的平均分

case 5 : dis_total()callchoice()break //显示某位学生的总分

case 6 : dis_all() callchoice()break //按总分排名并显示

default : cout <<"Wrong input, select again: "

}

cin >>choice

}

}

void openfile() //打开文件,并将信息复制到类成员中

{

ifstream fin(file, ios_base::in | ios_base::binary)

if(fin.is_open())

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

{

int num, age, english, maths, cpp

char sex

string name

fin >>num>>name >>sex >>age >>english >>maths >>cpp

stu[i].Set(num, name, sex, age, english, maths, cpp)

}

else cout <<"The file could not be open." <<endl

fin.close()

}

void getdatas() //接受输入,并将信息存入文件中

{

ofstream fout(file, ios::out | ios::trunc |ios_base::binary)

if(fout.is_open())

{

cout <<"Num\tName\tSex\tAge\tEnglish\tMaths\tCpp\t\n"

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

{

cin >>stu[i].Num >>stu[i].Name >>stu[i].Sex >>stu[i].Age

>>stu[i].English >>stu[i].Maths >>stu[i].Cpp

fout <<stu[i].Num <<" "<<stu[i].Name <<" " <<stu[i].Sex <<" "<<stu[i].Age<<" "

<<stu[i].English <<" "<<stu[i].Maths <<" " <<stu[i].Cpp <<" "

}

}

else cout <<"The file could not be open." <<endl

cout <<"The data has been writen in the flie " <<file <<endl

fout.close()

}

void dis_age() //按年龄大小排名,并显示成绩表

{

openfile()

Student temp

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

{

for (int j=i+1j<6j++)

{

if(stu[i].Age <stu[j].Age)

{

temp = stu[i]

stu[i] = stu[j]

stu[j] = temp

}

}

}

cout <<"N0. NameSex Age English Maths C++ Total\n"

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

{ stu[i].display()cout <<endl}

}

void dis_course() //按单科成绩排名,并显示成绩表

{

openfile()

cout <<"Select a course(E for english,M for Maths, C for C++):_\b"

char sel

cin >>sel

while (sel!='e' &&sel!='E' &&sel!='m' &&sel!='M' &&sel!='c' &&sel!='C')

{

cout <<"Not a right choice, input again:_\b"

cin >>sel

}

Student temp

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

{

for (int j=i+1j<5j++)

{

if (sel == 'e' or sel=='E')

{

if(stu[i].English <stu[j].English)

{

temp = stu[i]

stu[i] = stu[j]

stu[j] = temp

}

}

else if (sel == 'm' or sel=='M')

{

if(stu[i].Maths <stu[j].Maths)

{

temp = stu[i]

stu[i] = stu[j]

stu[j] = temp

}

}

else if (sel == 'c' or sel=='C')

{

if(stu[i].Cpp <stu[j].Cpp)

{

temp = stu[i]

stu[i] = stu[j]

stu[j] = temp

}

}

}

}

cout <<"N0. NameSex Age English Maths C++ Total\n"

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

{ stu[i].display()cout <<endl}

}

void dis_total() //显示某位学生的总成绩

{

openfile()

cout <<"Input the number of a student:__\b\b"

int choice

cin >>choice

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

if (choice == stu[i].Num)

stu[i].total()

}

void dis_ave() //显示某位学生的平均分

{

openfile()

cout <<"Input the number of a student:__\b\b"

int choice

cin >>choice

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

if (choice == stu[i].Num)

stu[i].ave()

}

void dis_all() //按部分多少排名,并显示成绩表

{

openfile()

Student temp

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

{

for (int j=i+1j<6j++)

{

if(stu[i].Total <stu[j].Total)

{

temp = stu[i]

stu[i] = stu[j]

stu[j] = temp

}

}

}

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

{

stu[i].Rank=i+1

}

cout <<"N0. NameSex Age English Maths C++ Total Rank\n"

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

{

stu[i].display()

cout.width(5)

cout <<stu[i].rank() <<endl

}

}

小巧的过客
可靠的小海豚
2026-04-16 19:59:15
给你找一份类似的。不完全一致。做课程设计还是可行的。自己稍加修改即可!

总体设计

一、 仔细阅读系统要求,首先将此系统化分为如下模块(即如下函数)

1、输入初始的学生信息:其中包括学生的姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息;可用函数cin(stu *p1)来实现此操作。

2、查询模块:可用stu *lookdata(stu *p1) 来实现。找到就输出此学生全部信息包括学生的语文、数学、英语和计算机等的成绩。

3、插入模块:可用insert( )函数来实现。其中通过学号的大小来比较的,并且以此来排序。

4、输出学生的信息以及成绩:通过学生的姓名来查看学生的语文、数学、英语和计算机等相关成绩,同时也可以分别通过caverage() 、maverage() 、eaverage() 和comaverage() 来输出语文、数学、英语和计算机等成绩的平均分数、最高和最低分数。

5、退出系统:可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。

二、系统主模块结构图:

详细设计

一、 界面设计

此系统界面采用图形和数字化菜单设计。

主界面设计如下:

学生成绩管理系统

请选择相应的数字执行相应的功能:

1:是否输入其他数据

2:查看数据

3:插入数据

4:查找数据

5:更新数据

6:保留数据

7:显示或打印数据

8:语文成绩状况

9:数学成绩状况

10:英语成绩状况

11:计算机成绩状况

12:?

13:退出系统

二、 数据结构设计:

程序设计中用到的结构体类型:

学生信息结构体类型:

typedef struct student{

char name[MAX]

int num[MAX]

char sex[MAX]

int chinese

int mathematic

int english

int computer

struct student *next

}

程序代码:

//原始密码是123456

#include"stdio.h"

#include"stddef.h"

#include"stddef.h"

#include"string.h"

#define MAX 10

typedef struct student{

char name[MAX]

int num[MAX]

char sex[MAX]

int chinese

int mathematic

int english

int computer

struct student *next

}stu

stu *head

void print()

{

system("cls")

printf("\t\t\tScore Manage System\n")

printf("<1>Enter Record\t")

printf("<2>Display\t")

printf("<3>Insert\t")

printf("<4>Quest\t")

printf("<5>Update\t")

printf("<6>Save\t")

printf("<7>Fresh\t")

printf("<8>Chinese Average\t")

printf("<9>Math Average\t")

printf("<10>English Average\t")

printf("<11>Computer Average\t")

printf("<12>Quit\t\n")

}

void cin(stu *p1)

{ printf("Enter name:\n")

scanf("%s",&p1->name)

printf("Enter num:\n")

scanf("%d",&p1->num)

printf("Enter sex:\n")

scanf("%s",&p1->sex)

printf("Enter score:\n")

printf("Enter chinese:\n")

scanf("%d",&p1->chinese)

printf("Enter math:\n")

scanf("%d",&p1->mathematic)

printf("Enter English:\n")

scanf("%d",&p1->english)

printf("Enter Computer:\n")

scanf("%d",&p1->computer)

}

stu *cindata()

{ stu *p1,*p2

int i=1

char ch

p1=(stu *)malloc(sizeof(stu))

head=p1

while(i)

{

cin(p1)

printf("Do you Want to Continue?yes or no")

ch=getchar()

ch=getchar()

if(ch=='n'||ch=='N')

{ i=0

p1->next=NULL

}

else

{ p2=p1

p1=(stu *)malloc(sizeof(stu))

p2->next=p1

}

}

return(p1->next)

}

stu *lookdata(stu *p1)

{

while(p1!=NULL)

{ printf("Num:%d\t",p1->num)

printf("Name:%s\t",p1->name)

printf("Sex:%s\t",p1->sex)

printf("\n")

printf("Chinese:%d\t",p1->chinese)

printf("Math:%d\t",p1->mathematic)

printf("English:%d\t",p1->english)

printf("Computer:%d\t",p1->computer)

printf("\n")

p1=p1->next

}

return p1

}

void insert()

{ stu *p1,*p3,*p2

char ch

p1=head

p3=(stu *)malloc(sizeof(stu))

p3->next=NULL

if(head==NULL){ head=p3return}

cin(p3)

while(p1!=NULL&&(p1->num<p3->num))

{ p2=p1p1=p1->next}

if(p2==head) {p3->next=headhead=p3return}

p3->next=p1

p2->next=p3

}

find(stu *p2)

{ char name[20]

int b=0

printf("Enter the name of the student you want to find:")

scanf("%s",name)

while(p2!=NULL)

{if(strcmp(name,p2->name)==0)

{

printf("The data you want has be found\n")

printf(" Name:%s\t",p2->name)

printf("Num:%d\t",p2->num)

printf("sex%s\t",p2->sex)

printf("\n")

printf("Chinese:%d\t",p2->chinese)

printf("Math:%d\t",p2->mathematic)

printf("English:%d\t",p2->english)

printf("Computer:%d\t",p2->computer)

printf("\n")

b=1

}

else if(b==0)

printf("sorry not find data!")

p2=p2->next

}

if(b==1)

{

print()

printf("Find one\n")}

else

{print()

printf("Not find\n")

}

}

void caverage()

{ stu *p1

int i

float max=0.0,min=200.0

float sum=0.0,aver=0

p1=head

if(p1==NULL)

printf("not data!")

else

{for(i=0p1!=NULLi++,p1=p1->next)

sum+=p1->chinese

aver=sum/i

p1=head

for(i=0p1!=NULLi++,p1=p1->next)

{if(max<p1->chinese)

max=p1->chinese

}

p1=head

for(i=0p1!=NULLi++,p1=p1->next)

if(min>p1->chinese)

min=p1->chinese

}

printf("Chinese Average:%f",aver)

printf("Chinese Max:%f",max)

printf("Chinese Min:%f",min)

}

void maverage()

{ stu *p1

int i

float max=0.0,min=200.0

float sum=0.0,aver=0

p1=head

if(p1==NULL)

printf("not data!")

else

{for(i=0p1!=NULLi++,p1=p1->next)

sum+=p1->mathematic

aver=sum/i

p1=head

for(i=0p1!=NULLi++,p1=p1->next)

{if(max<p1->mathematic)

max=p1->mathematic

}

p1=head

for(i=0p1!=NULLi++,p1=p1->next)

if(min>p1->mathematic)

min=p1->mathematic

}

printf("Mathe Average:%f",aver)

printf("Mathe Max:%f",max)

printf("Mathe Min:%f",min)

}

void eaverage()

{ stu *p1

int i

float max=0.0,min=200.0

float sum=0.0,aver=0

p1=head

if(p1==NULL)

printf("not data!")

else

{for(i=0p1!=NULLi++,p1=p1->next)

sum+=p1->english

aver=sum/i

p1=head

for(i=0p1!=NULLi++,p1=p1->next)

{if(max<p1->english)

max=p1->english

}

p1=head

for(i=0p1!=NULLi++,p1=p1->next)

if(min>p1->english)

min=p1->english

}

printf("English Average:%f",aver)

printf("English Max:%f",max)

printf("English Min:%f",min)

}

void comaverage()

{ stu *p1

int i

float max=0.0,min=200.0

float sum=0.0,aver=0

p1=head

if(p1==NULL)

printf("not data!")

else

{for(i=0p1!=NULLi++,p1=p1->next)

sum+=p1->computer

aver=sum/i

p1=head

for(i=0p1!=NULLi++,p1=p1->next)

{if(max<p1->computer)

max=p1->computer

}

p1=head

for(i=0p1!=NULLi++,p1=p1->next)

if(min>p1->computer)

min=p1->computer

}

printf("Computer Average:%f",aver)

printf("Computer Max:%f",max)

printf("Computer Min:%f",min)

}

update(stu *p2)

{

char name[10]

int b=0

printf("Enter The Name")

scanf("%s",name)

while(p2!=NULL)

{if(strcmp(name,p2->name)==0)

{

printf("Find you data\n")

scanf("Name:%s",p2->name)

scanf("Num:%s",p2->num)

scanf("Sex:%s",p2->sex)

scanf("Chinese:%d",p2->chinese)

scanf("Math:%d",p2->mathematic)

scanf("english:%d",p2->english)

scanf("Computer:%d",p2->computer)

printf("Success!")

b=1}

else if(b==0)

printf("Sorry not Find data!")

p2=p2->next}

if(b==0)

{print()

printf("Sorry not Find data!")

}

else

{

print()

printf("Finish!")

}

}

save(stu *p2)

{

FILE *fp

char file[10]

printf("Enter file name")

scanf("%s",file)

fp=fopen(file,"w")

while(p2!=NULL)

{

fprintf(fp,"%s",p2->name)

fprintf(fp,"%s",p2->num)

fprintf(fp,"%s",p2->sex)

fprintf(fp,"%d",p2->chinese)

fprintf(fp,"%d",p2->mathematic)

fprintf(fp,"%d",p2->english)

fprintf(fp,"%d",p2->computer)

p2=p2->next

}

fclose(fp)

}

char password[7]="123456"

void main()

{ int choice

stu *p2

char s[8]

int flag=0,i

int n=3

do{ printf("Enter password:\n")

scanf("%s",s)

if(!strcmp(s,password))

{ printf("PASS\n\n\n")

flag=1

break

}

else{

printf("Error Enter again:\n")

n--

}

}

while(n>0)

if(!flag)

{printf("you have Enter 3 times!")

exit(0)

}

printf("~~~~~~~~~~\t\t\t~~~~~~~~~~~~\n")

printf("\t\tWelcom to the Mis\n")

printf("Author:-----\tClass:------\tNum:------\n")

printf("Adress:HG\n")

printf("%%%%%%%%%%%%%%%%%%%%%%%%%%%\n")

printf("\t\tEnter OP:\n")

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

printf("==============\t\t==============\n")

printf("==============\t\t==============\n")

printf("\t\tEnter the MIS yes or no\n")

scanf("%d",&choice)

if(choice=='n'||choice=='N')

exit(1)

print()

while(1)

{

printf("Enter choice:")

scanf("%d",&i)

if(i<1||i>13)

{

printf("Enter num from 1 to 13:\n")

exit(1)

}

switch(i)

{case 1:

p2=cindata()

break

case 2:

p2=lookdata(head)

break

case 3:

insert()

break

case 4:

find(head)

break

case 5:

update(head)

break

case 6:

save(head)

break

case 7:

print()

break

case 8:

caverage()

break

case 9:

maverage()

break

case 10:

eaverage()

break

case 11:

comaverage()

break

case 12:

case 13:

exit(1)

break

}

scanf("%d",&i)

}

}

跳跃的八宝粥
冷静的饼干
2026-04-16 19:59:15
看可以不咯?

#include<stdio.h>

int avgGrade(int a[50])

{

int i,sum=0,max=0,min=0

double avg=0.0

max=a[0]

min=a[0]

for(i=0i<50i++)

{

sum+=a[i]

if(a[i]>max)

max=a[i]

if(a[i]<min)

min=a[i]

}

avg=(double)sum/50

printf("平均成绩为%lf,最高成绩为%d,最低成绩为%d\n",avg,max,min)

return 0

}

int compositor(int a[50])

{

int i,j,n,temp=0

printf("请输入您要排序的方式(0:升序,1:降序):\n")

scanf("%d",&n)

for(i=0i<50i++)

{

for(j=0j<ij++)

{

if(n==0)

{

if(a[j]>a[i])

{

temp=a[i]

a[i]=a[j]

a[j]=temp

}

}

else

{

if(a[j]<a[i])

{

temp=a[i]

a[i]=a[j]

a[j]=temp

}

}

}

}

for(i=0i<50i++)

{

printf("%d",a[i])

}

}

int insertGrade(int a[50])

{

int i,n

printf("请输入你要插入的成绩:\n")

scanf("%d",&n)

for(i=0i<50i++)

if(n>a[i])

{

for(s=49s>=is--)

a[s+1]=a[s]

break

}

a[i]=n

}

int deleteGrade(int a[50])

{

int x,i,j

printf("请输入你要删除的成绩:\n")

scanf("%d",&x)

for(i=0i<10i++)

{

if(a[i]==x)

for(j=i+1j<10j++)

a[i]=a[j]

a[j]='\0'

}

}

void main()

{

int n,i,a[50]

printf("请输入50个学生的成绩:\n")

for(i=0i<50i++)

{

scanf("%d",&a[i])

}

while(1)

{

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

printf ("请选择您的功能:\n\n")

printf (" 0 录入成绩\n")

printf (" 1 输出成绩\n")

printf (" 2 输出平均分、最高分、最低分\n")

printf (" 3 成绩降序或升序排列\n")

printf (" 4 插入一个成绩\n")

printf (" 5 删除用户给定的成绩\n")

printf (" 6 退出\n\n")

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

scanf("%d",n)

switch(n)

{

case 0:

printf("请输入50个学生的成绩:\n")

for(i=0i<50i++)

{

scanf("%d",&a[i])

}

break

case 1:

for(i=0i<50i++)

{

printf("%d",a[i])

}

break

case 2:

avgGrade(a)

break

case 3:

compositor(a)

break

case 4:

insertGrade(a)

break

case 5:

deleteGrade(a)

break

case 6:

exit (0)

}

}

return 0

}