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

C++课程设计 设计学校课程管理系统

体贴的铃铛
安详的芹菜
2022-12-28 13:33:00

C++课程设计 设计学校课程管理系统

最佳答案
现实的冬天
慈祥的诺言
2026-05-14 07:08:49

《C++课程设计》

课程设计题目:学生成绩管理系统

学生班级:*****

学生姓名:*****

学生学号:*****

(2)学生成绩管理系统需求与功能分析

学生成绩的录入、统计、查询、修改、删除、输出。 画出功能结构图。

(3)学生成绩管理系统的数据结构表

序号 成员名(字段名) 数据类型 长度 字段含义

1 class_0 char 20 班级

2 num int 学号

3 name char 8 姓名

4 elec flaot 电子技术

5 c_prog float C 程序设计

6 media flaot 多媒体技术

7 eng float 大学英语

8 math float 高等数学

9 sport float 大学体育

10 polity float 马克思主义政治经济学

11 ave float 平均成绩

12 order int 名次

(4)学生成绩管理系统测试数据表

class_0 num name elec c_prog media eng math sport polity ave order

网络30331 3033101 马云飞 80 70 60 70 70 60 80 表中其余数据自己编造。

(5)使用链表编写程序(手写源程序代码,并给出注解)

0)定义链表结点

1)主函数main():定义链表头指针,调用录入、统计等函数对成绩表进行处理;

2)建立链表函数Create():输入班级到政治课成绩信息;

3)统计函数Statistic():计算平均成绩;

4)查询函数Lookup():查询指定学号学生成绩记录;

5)修改函数Modify():修改指定学号学生成绩记录;

6)删除函数Delete():删除指定学号学生记录;

7)输出函数Output():输出班级所有学生成绩记录;

8)插入函数Insert():按平均分顺序插入新结点。

9) 排序函数Sort():按平均分对学生成绩记录项进行降序排序;

程序如下:

#include <stdlib.h>

#include <stdio.h>

#include <iostream>

#include <string>

#include <fstream>

using namespace std

struct Node//定义链表结点

{

char* class_0//班级

int number

char* name//姓名

float elec//电子技术成绩

float c_prog//C程序设计成绩

float media//多媒体技术成绩

float eng//大学英语成绩

float math//高等数学成绩

float sport//大学体育成绩

float polity//马克思主义政治经济学成绩

float ave//平均成绩

int order//名次

Node* link

Node(){link=NULL}

Node(int _number,char* _class_0,char* _name,float _elec,

float _c_prog,float _media,float _eng,float _math,

float _sport,float _polity,float _ave,int _order,Node* next)

{

number=_number

class_0=new char[21]

strcpy(class_0,_class_0)

name=new char[9]

strcpy(name,_name)

elec=_elec

c_prog=_c_prog

media=_media

eng=_eng

math=_math

sport=_sport

polity=_polity

ave=_ave

order=_order

link=next

}

~Node()

{

delete []class_0

delete []name

}

}

class StudentScore

{

private:

Node* first//链表的头指针

int choice//选择数据的读入方式

int fileNum//当前文件数减一

int fileLoc//定位当前文件

string* fileName

int operChoice

int RecordLength

public:

StudentScore()

void Save()

void BuildList()//手工建立成绩链表

void ReadInfo(int k)//从内存中读入学生信息

void ClearList()

void Statistic()

void Sort()

void Add()

void Delete()

void PrintList()

void Menu()

}

StudentScore::StudentScore()

{

RecordLength=0

operChoice=0

first=NULL

choice=0

fileLoc=0

fileNum=0

fileName=new string[10]//最多可以存10个文件

}

int GetOrder(Node* first,float ave)

void StudentScore::BuildList()

{

int _number//学号

char* _class_0=new char[21]//班级

char* _name=new char[9]//姓名

float _elec//电子技术成绩

float _c_prog//C程序设计成绩

float _media//多媒体技术成绩

float _eng//大学英语成绩

float _math//高等数学成绩

float _sport//大学体育成绩

float _polity//马克思主义政治经济学成绩

float _ave//平均成绩

int _order//名次

char c

Node *p,*r=NULL

first=NULL

cout<<"您要输入学生成绩信息?"<<endl

while((c=getchar())=='n')

while(tolower(c)!='n')

{

cin>>_class_0//班级

cin>>_number

cin>>_name//姓名

cin>>_elec

cin>>_c_prog

cin>>_media

cin>>_eng

cin>>_math

cin>>_sport

cin>>_polity

_ave=(_elec+_c_prog+_media+_eng+_math+_sport+_polity)/7//求得平均成绩

_order=GetOrder(first,_ave)

p=new Node(_number,_class_0,_name,_elec,

_c_prog,_media,_eng,_math,_sport,_polity,

_ave,_order,NULL)//建立一个新的结点储存信息

if(first!=NULL)

r->link=p

else first=p

r=p

RecordLength++

cout<<"您要输入学生成绩信息?"<<endl

while((c=getchar())=='n')

}

}

int GetOrder(Node* first,float ave)//名次记录有严重问题

最新回答
开心的中心
凶狠的世界
2026-05-14 07:08:49

#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")

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

优秀的雪糕
坚强的电话
2026-05-14 07:08:49
课程管理系统的话。一般来说,必须的有两个:用户表——字段涉及密码、用户名。课程信息表,涉及课程相关信息——课程名、教师、学分等。

其他还需要什么表就要看这个系统还需要什么功能了。

欢喜的鸭子
还单身的宝贝
2026-05-14 07:08:49
#include <iostream>

#include <string>

#include <iomanip>

#include <fstream>

using namespace std

struct List

{

string m_Name

string m_ID//可能有的学号里有字母,所以用string类型。

short int m_Chinese

short int m_Match

short int m_English

struct List *Next//指针域。

}

typedef struct List Node

typedef Node *Link

//---------------函数声明-------------------

Link Create(Link Head)

Link Search(Link Head)

Link Search_front(Link Head)

void Release(Link Head)

void Display(Link Head)

void Display_One(Link Head)

void Display(Link Head,fstream&ofile)

Link AddInfo(Link Head)

Link DelInfo(Link Head)

Link Modify(Link Head)

void Grade_Stat(Link Head)

Link Sort(Link Head)

//---------------函数实现-------------------

Link Create(Link Head)

{

Head=(Link)new Node

if(!Head)

{

cout<<"分配内存失败。"<<endl

exit(-1)

}

Head->m_Name=""

Head->m_ID=""

Head->m_Chinese=0

Head->m_Match=0

Head->m_English=0

Head->Next=NULL

return Head

}

Link Search(Link Head)

{

cout<<" 1.按姓名查询 2.按学号查询 "<<endl

int select

cin>>select

while(cin.fail())

{

cout<<"请选择正确的菜单项:"

cin.clear()

fflush(stdin)

cin>>select

}

Link ptr

ptr=Head

if(select==1)

{

string name

cout<<"请输入要查询的姓名:"

cin>>name

while(ptr!=NULL)

{

if(ptr->m_Name==name)

{

Display_One(ptr)

return ptr

}

ptr=ptr->Next

}

cout<<"没找到,怎么办?"<<endl

}

else if(select==2)

{

string ID

cout<<"请输入要查询的学号:"

cin>>ID

while(ptr!=NULL)

{

if(ptr->m_ID==ID)

{

Display_One(ptr)

return ptr

}

ptr=ptr->Next

}

cout<<"没找到,怎么办?"<<endl

}

return ptr

}

Link Search_front(Link Head)

{//返回前驱节点。

cout<<" 1.按姓名删除 2.按学号删除 "<<endl

int select

cin>>select

while(cin.fail())

{

cout<<"请选择正确的菜单项:"

cin.clear()

fflush(stdin)

cin>>select

}

Link ptr

Link front

ptr=Head->Next

front=Head

if(select==1)

{

string name

cout<<"请输入要删除的姓名:"

cin>>name

while(ptr!=NULL)

{

if(ptr->m_Name==name)

{

Display_One(ptr)

return front

}

ptr=ptr->Next

front=front->Next

}

cout<<"没找到,怎么办?"<<endl

}

else if(select==2)

{

string ID

cout<<"请输入要删除的学号:"

cin>>ID

while(ptr!=NULL)

{

if(ptr->m_ID==ID)

{

Display_One(ptr)

return front

}

ptr=ptr->Next

front=front->Next

}

cout<<"没找到,怎么办?"<<endl

}

return front

}

void Release(Link Head)

{

Link ptr

while(Head!=NULL)

{

ptr=Head

Head=Head->Next

delete ptr

}

}

void Display(Link Head)

{

Link ptr

ptr=Head->Next

cout<<"----------------------------------------------------------------------"<<endl

cout<<"---------------------------- 所有学生信息 --------------------------"<<endl

cout<<"---姓名--------学号-----------语文-----------数学-----------英语------"<<endl

while(ptr!=NULL)

{

cout<<setw(15)<<left<<ptr->m_Name

<<setw(15)<<left<<ptr->m_ID

<<setw(15)<<left<<ptr->m_Chinese

<<setw(15)<<left<<ptr->m_Match

<<setw(15)<<left<<ptr->m_English<<endl

ptr=ptr->Next

}

}

void Display(Link Head,fstream&ofile)

{

Link ptr

ptr=Head->Next

ofile<<"----------------------------------------------------------------------"<<endl

ofile<<"---------------------------- 所有学生信息 --------------------------"<<endl

ofile<<"---姓名--------学号-----------语文-----------数学-----------英语------"<<endl

while(ptr!=NULL)

{

ofile<<setw(15)<<left<<ptr->m_Name

<<setw(15)<<left<<ptr->m_ID

<<setw(15)<<left<<ptr->m_Chinese

<<setw(15)<<left<<ptr->m_Match

<<setw(15)<<left<<ptr->m_English<<endl

ptr=ptr->Next

}

}

void Display_One(Link Head)

{

Link ptr

ptr=Head

cout<<"----------------------------------------------------------------------"<<endl

cout<<"---------------------------- 查询结果信息 --------------------------"<<endl

cout<<"---姓名--------学号-----------语文-----------数学-----------英语------"<<endl

cout<<setw(15)<<left<<ptr->m_Name

<<setw(15)<<left<<ptr->m_ID

<<setw(15)<<left<<ptr->m_Chinese

<<setw(15)<<left<<ptr->m_Match

<<setw(15)<<left<<ptr->m_English<<endl

}

Link AddInfo(Link Head)

{

Link ptr

ptr=Head

while(ptr->Next!=NULL)

{

ptr=ptr->Next

}

Link ptr2

char again

do

{

ptr2=(Link)new Node

if(!ptr2)

{

cout<<"内存分配失败!"<<endl

exit(-1)

}

//数据域

string Name,ID

short int Chinese,Match,English

cout<<"输入姓名:"

cin>>Name

cout<<endl<<"输入学号:"

cin>>ID

cout<<endl<<"语文成绩:"

cin>>Chinese

cout<<endl<<"数据成绩:"

cin>>Match

cout<<endl<<"英语成绩:"

cin>>English

ptr2->m_Name=Name

ptr2->m_ID=ID

ptr2->m_Chinese=Chinese

ptr2->m_Match=Match

ptr2->m_English=English

//指针域

ptr2->Next=NULL//作为尾节点。

ptr->Next=ptr2//连接入链表。

ptr=ptr2//将ptr2作为下一次产生的节点的前驱节点.

cout<<"是否继续输入?(Y/N) "

cin>>again

}while(again=='Y'||again=='y')

return Head

}

Link DelInfo(Link Head)

{

Link ptr

Link ptr2

ptr=Head

Link f_ptr//前驱节点。

f_ptr=Search_front(ptr)

ptr2=f_ptr->Next

f_ptr->Next=f_ptr->Next->Next

delete ptr2

return Head

}

Link Modify(Link Head)

{

Link ptr

ptr=Head

ptr=Search(ptr)

cout<<"修改前信息为:"<<endl

Display_One(ptr)

//cout<<"请选择你要修改的选项:A:姓名 B:学号 C:语文成绩 D:数学成绩 E:英语成绩"<<endl

string name,ID

float Chinese,Match,English

cout<<"输入新姓名:"

cin>>name

cout<<endl<<"输入新学号:"

cin>>ID

cout<<endl<<"输入新语文成绩:"

cin>>Chinese

cout<<endl<<"输入新数学成绩:"

cin>>Match

cout<<endl<<"输入新英语成绩:"

cin>>English

ptr->m_Name=name

ptr->m_ID=ID

ptr->m_Chinese=Chinese

ptr->m_Match=Match

ptr->m_English=English

cout<<endl<<"修改后信息为:"<<endl

Display_One(ptr)

return Head

}

void Grade_Stat(Link Head)

{//成绩统计。

Link ptr

ptr=Head

cout<<"请输入你要查询的课程名(chinese|match|english)和一个分数范围[min,max]."<<endl

string name

short int min,max

int SwitchNum

cout<<"课程名:"

cin>>name

cout<<endl<<"分数下限:"

cin>>min

cout<<endl<<"分数上限:"

cin>>max

if(name=="chinese")

SwitchNum=1

else if(name=="match")

SwitchNum=2

else if(name=="english")

SwitchNum=3

else

{

cout<<"请输入一个正确的课程名:"<<endl

return

}

while(ptr!=NULL)

{

switch(SwitchNum)

{

case 1:

if(ptr->m_Chinese<=max&&ptr->m_Chinese>=min)

Display_One(ptr)

break

case 2:

if(ptr->m_Match<=max&&ptr->m_Match>=min)

Display_One(ptr)

break

case 3:

if(ptr->m_English<=max&&ptr->m_English>=min)

Display_One(ptr)

}

}

}

Link Sort(Link Head)

{//我创建的是带头节点的链表。用直接插入法。

cout<<"请输入你想排序的课程名(用中文):"

string course_name

cin>>course_name

if((Head->Next==NULL)||(Head->Next->Next==NULL))//此步条件判断非常有价值。

{

cout<<"数据节点数少于2个,不用排序!"<<endl

return Head

}

//-----------第二步;

Link ptr

Link ptr_F

Link ptr_N

ptr=Head->Next->Next

ptr_F=Head

Head->Next->Next=NULL//到此,分成了两个链表。

//第三步。

while(ptr)

{

ptr_N=ptr->Next

ptr_F=Head//ptr_F的归位。

while(ptr_F->Next)

{

if(course_name=="语文")

{

if(ptr->m_Chinese>ptr_F->Next->m_Chinese)

{

ptr->Next=ptr_F->Next

ptr_F->Next=ptr

break

}//if

else

{

ptr_F=ptr_F->Next

}

}

if(course_name=="数学")

{

if(ptr->m_Match>ptr_F->Next->m_Match)

{

ptr->Next=ptr_F->Next

ptr_F->Next=ptr

break

}//if

else

{

ptr_F=ptr_F->Next

}

}

if(course_name=="英语")

{

if(ptr->m_English>ptr_F->Next->m_English)

{

ptr->Next=ptr_F->Next

ptr_F->Next=ptr

break

}//if

else

{

ptr_F=ptr_F->Next

}

}

}//while(ptr_F->Next)

if(ptr_F->Next==NULL)

{

ptr->Next=ptr_F->Next

ptr_F->Next=ptr//表示插到有序链表的最后面了。

}

ptr=ptr_N//归位,准备下一次排序。

}//while(ptr)

cout<<"从高到低,排序成功!"<<endl

return Head

}

//----------主函数----------------------

int main()

{

fstream ofile

ofile.open("e:\\student.txt",ios_base::out)

if(!ofile)

{

cout<<"文件打开失败。"<<endl

exit(-1)

}

Link head=0

head=Create(head)

while(1)

{

cout<<"*****************************************************"<<endl

cout<<"*** 1.添加信息 2.修改信息 3.删除信息 4.信息查询 ***"<<endl

cout<<"*** 5.成绩统计 6.排 序 7.显示/保存 0.退 出 ***"<<endl

cout<<"*****************************************************"<<endl

cout<<"请选择正确的菜单项:"

int sel

cin>>sel

while(cin.fail())

{

cout<<"请选择正确的菜单项:"

cin.clear()

fflush(stdin)

cin>>sel

}

switch(sel)

{

case 0:

exit(0)

case 1:

head=AddInfo(head)

break

case 2:

head=Modify(head)

break

case 3:

head=DelInfo(head)

break

case 4:

Search(head)

break

case 5:

Grade_Stat(head)

break

case 6:

Sort(head)

break

case 7:

Display(head)//在标准显示器上显示。

Display(head,ofile)//在文件中显示。

break

default:

break

}

}

Release(head)

return 0

}

换一下汉字就好了

腼腆的茉莉
危机的酒窝
2026-05-14 07:08:49
c语言课程设计_学生成绩管理系统

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

int INDEX[32]

struct STUDENT

{

int id,age,chinese,math,english

char name[21]

}students[32]

void page_title(char *menu_item)

{

clrscr()

printf(">>>学 生 管 理 系 统 <<<\n\n- %s -\n\n",menu_item)

}

void return_confirm(void)

{

printf("\n按任意键返回……\n")

getch()

}

void student_new(void)

{

int n

page_title("录入学生基本信息")

for(n=0n<32n++)

if(students[n].id==0) break

printf("学号:")

scanf("%d",&students[n].id)

printf("姓名:")

scanf("%s",&students[n].name)

printf("年龄:")

scanf("%d",&students[n].age)

return_confirm()

}

int search_id(void)

{

int n,i

printf("请输入学生学号:")

scanf("%d",&i)

for(n=0n<32n++)

{

if(students[n].id==i&&students[n].id!=0)

{

printf("学号:%d\n",students[n].id)

printf("姓名:%s\n",students[n].name)

printf("年龄:%d\n",students[n].age)

return n

}

}

printf("\n输入错误或学号不存在.\n")

return -1

}

void student_del(void)

{

int n

page_title("注销学生基本信息")

if((n=search_id())!=-1) students[n].id=0

printf("\n!该学生已注销.\n")

return_confirm()

}

void student_edit(void)

{

int n

page_title("编辑学生基本信息")

if((n=search_id())!=-1)

{

printf("\n请重新输入新信息:\n学号:")

scanf("%d",&students[n].id)

printf("姓名:")

scanf("%s",&students[n].name)

printf("年龄:")

scanf("%d",&students[n].age)

}

return_confirm()

}

void score_input(void)

{

int s,n,t

page_title("录入成绩")

printf("\n请用数字键选择科目\n1-语文 2-数学 3-英语\n")

scanf("%d",&s)

for(n=0n<32n++)

{

if(students[n].id!=0)

{

printf("学号:%d 姓名:%s 成绩:",students[n].id,students[n].name)

scanf("%d",&t)

switch(s)

{

case 1 : students[n].chinese=tbreak

case 2 : students[n].math=tbreak

case 3 : students[n].english=tbreak

}

}

}

return_confirm()

}

void score_edit(void)

{

int n

page_title("修改成绩")

if((n=search_id())!=-1)

{

printf("语文:%d 数学:%d 英语:%d\n",students[n].chinese,students[n].math,students[n].english)

printf("\n请重新输入成绩:\n语文:")

scanf("%d",&students[n].chinese)

printf("数学:")

scanf("%s",&students[n].math)

printf("英语:")

scanf("%d",&students[n].english)

}

return_confirm()

}

void sort_it(char nn)

{

int n,m,p,x,t[32]

for(n=0n<32n++)

{

switch(nn)

{

case '1' : t[n]=students[n].idbreak

case '2' : t[n]=students[n].chinesebreak

case '3' : t[n]=students[n].mathbreak

case '4' : t[n]=students[n].englishbreak

case '5' : t[n]=students[n].chinese+students[n].math+students[n].englishbreak

}

}

for(n=0n<32n++)

{

x=0

p=-1

for(m=0m<32m++)

{

if(t[m]>x)

{

x=t[m]

p=m

}

}

t[p]=-1

INDEX[n]=p

}

}

void browser(void)

{

int n,x

char k

sort_it('1')

while(1)

{

page_title("浏览")

printf("按数字键选择排序方式或按 0 返回\n")

printf("学号-1\t姓名\t\t年龄\t语文-2\t数学-3\t英语-4\t总分-5\n")

for(n=0n<32n++)

{

if(INDEX[n]!=-1)

{

x=INDEX[n]

printf("%d\t%s\t",students[x].id,students[x].name)

printf("%d\t%d\t",students[x].age,students[x].chinese)

printf("%d\t%d\t",students[x].math,students[x].english)

printf("%d\n",students[x].chinese+students[x].math+students[x].english)

}

}

k=getch()

if(k<'6'&&k>'0') sort_it(k)

else if(k=='0') break

else continue

}

}

void main(void)

{

menu: page_title("操作选单")

printf("请用数字键选择操作\n\n")

printf("1 录入学生基本信息\n2 修改学生基本信息\n")

printf("3 注销学生基本信息\n\n4 录入成绩\n5 修改成绩\n\n")

printf("6 浏览...\n \n0 退出\n")

switch(getch())

{

case '1' : student_new()break

case '2' : student_edit()break

case '3' : student_del()break

case '4' : score_input()break

case '5' : score_edit()break

case '6' : browser()break

case '0' : exit(0)

}

goto menu

}