C语言实训

成绩管理系统
[问题描述]学生信息包括:学号、姓名、班级及各门课
[基本要求]程序功能:录入,插入,删除,修改,查询,排序,统计等。
[实现提示]将学生信息定义成结构体类型,形成线性表,可按顺序存储或链式存储方式存储,实现以上功能。
高手快来帮帮忙啊!!

/*8、学生成绩管理系统
学生属性:学号,姓名,入学年月,有成绩的学期数,四门课的成绩等9个成员,
在编程中要求当执行状态输入i为输入学生记录,输入D为删除,输入s为查询(以学号为查询条件,输入p为将整个学生记录输出,使用结构数组或结构指针编程)
*/
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#include "string.h"
#include "windows.h"

int stu_num=0; //全局变量,已输入成绩的学生人数

struct student //结构体数组,用于储存学生的数据
{
char num[11]; //储存学号
char name[11]; //储存名字
char sex[3]; //储存性别
char date[11]; //储存入学年月
int term; //储存学期数
float score1; //储存成绩1
float score2; //储存成绩2
float score3; //储存成绩3
float score4; //储存成绩4
}student[100];

void warning() //警告函数
{
char a;
printf("您所查找的学生暂无数据,按任意键返回重新输入");
a=getch(); //储存任意键
}

void input() //输入函数
{
char a;
do
{
system("cls");
printf("(i)输入学生数据\n(e)返回主菜单\n请输入您要执行的选项:");
a=getch(); //获取输入选项
if(a=='i'||a=='I') //输入学生数据
{
system("cls"); //清屏函数
printf("下面输入第%d个学生的数据\n学号:",stu_num+1); //以下操作储存学生数据于结构体中
scanf("%s",&student[stu_num].num);
printf("姓名:");
scanf("%s",&student[stu_num].name);
printf("性别:");
scanf("%s",&student[stu_num].sex);
printf("入学年月:");
scanf("%s",&student[stu_num].date);
printf("学期:");
scanf("%d",&student[stu_num].term);
printf("成绩1:");
scanf("%f",&student[stu_num].score1);
printf("成绩2:");
scanf("%f",&student[stu_num].score2);
printf("成绩3:");
scanf("%f",&student[stu_num].score3);
printf("成绩4:");
scanf("%f",&student[stu_num].score4);
stu_num++;
}
if(a=='e'||a=='E') //退出输入函数
{
break; //强制结束循环以退出输入函数
}
}while(1);
}

void output() //输出函数
{
system("cls"); //清屏函数
int i,j;
printf("学号\t 姓名 性别 入学年月 学期 成绩1 成绩2 成绩3 成绩4\n");
for(i=0;i<stu_num;i++) //通过for语句逐个输出学生数据
{
printf("%-12s%-8s%-8s%-10s%-6d%-8.2f%-8.2f%-8.2f%-5.2f\n",student[i].num,student[i].name,student[i].sex,student[i].date,student[i].term,student[i].score1,student[i].score2,student[i].score3,student[i].score4);
}
printf("按任意键返回主菜单");
j=getch(); //储存任意键
}

void revise() //修改函数
{
int i=0;
char a,num[11],name[11];
st: system("cls"); //清屏函数
printf("(x)按学号查找修改\n(m)按名字查找修改\n(e)返回主菜单\n请输入您要执行的选项:");
a=getch(); //获取输入选项
if(a=='x'||a=='X') //按学号查找
{
printf("请输入该学生学号:");
scanf("%s",&num); //输入查找数据并用for语句进行逐个对比
for(i=0;i<stu_num;i++)
{
if(strcmp(num,student[i].num)==0)
{
break; //找到后结束循环
}
}
}
else if(a=='m'||a=='M') //按姓名查找
{
printf("请输入该学生姓名:");
scanf("%s",&name); //输入查找数据并用for语句进行逐个对比
for(i=0;i<stu_num;i++)
{
if(strcmp(name,student[i].name)==0)
{
break; //找到后结束循环
}
}
}
else if(a=='e'||a=='E') //退出修改函数
{
return;
}
else //为了防止选错选项
{
goto st;
}
if(i==stu_num) //未找到学生数据时提示警告并重新查找
{
warning();
goto st;
}
system("cls");
printf("您要更改的学生的信息为:\n"); //输出欲修改的学生信息
printf("学号\t 姓名 性别 入学年月 学期 成绩1 成绩2 成绩3 成绩4\n");
printf("%-12s%-8s%-8s%-10s%-6d%-8.2f%-8.2f%-8.2f%-5.2f\n",student[i].num,student[i].name,student[i].sex,student[i].date,student[i].term,student[i].score1,student[i].score2,student[i].score3,student[i].score4);
printf("请更新该学生的数据\n学号:"); //找到后进行数据更新
scanf("%s",&student[i].num);
printf("姓名:");
scanf("%s",&student[i].name);
printf("性别:");
scanf("%s",&student[i].sex);
printf("入学年月:");
scanf("%s",&student[i].date);
printf("学期:");
scanf("%d",&student[i].term);
printf("成绩1:");
scanf("%f",&student[i].score1);
printf("成绩2:");
scanf("%f",&student[i].score2);
printf("成绩3:");
scanf("%f",&student[i].score3);
printf("成绩4:");
scanf("%f",&student[i].score4);
printf("该学生数据已修改,按任意键返回");
a=getch(); //储存任意键
}

void search() //查询函数
{
int i=0;
char a,num[11],name[11];
st: system("cls"); //清屏函数
printf("(x)按学号查找\n(m)按名字查找\n(e)返回主菜单\n请输入您要执行的选项:");
a=getch(); //获取输入选项
if(a=='x'||a=='X') //按学号查找
{
printf("请输入该学生学号:");
scanf("%s",&num); //输入查找数据并用for语句进行逐个对比
for(i=0;i<stu_num;i++)
{
if(strcmp(num,student[i].num)==0)
{
break; //找到后结束循环
}
}
}
else if(a=='m'||a=='M') //按姓名查找
{
printf("请输入该学生姓名:");
scanf("%s",&name); //输入查找数据并用for语句进行逐个对比
for(i=0;i<stu_num;i++)
{
if(strcmp(name,student[i].name)==0)
{
break; //找到后结束循环
}
}
}
else if(a=='e'||a=='E') //退出查询函数
{
return;
}
else //为了防止选错选项
{
goto st;
}
if(i==stu_num) //未找到学生数据时提示警告并重新查找
{
warning();
goto st;
}
printf("学号\t 姓名 性别 入学年月 学期 成绩1 成绩2 成绩3 成绩4\n");
printf("%-12s%-8s%-8s%-10s%-6d%-8.2f%-8.2f%-8.2f%-5.2f\n",student[i].num,student[i].name,student[i].sex,student[i].date,student[i].term,student[i].score1,student[i].score2,student[i].score3,student[i].score4);
printf("按任意键返回主菜单");
a=getch();
}

void del() //删除函数
{
int i=0,j;
char a,num[11],name[11];
st: system("cls"); //清屏函数
printf("(x)按学号查找删除\n(m)按名字查找删除\n(e)返回主菜单\n请输入您要执行的选项:");
a=getch(); //获取输入选项
if(a=='x'||a=='X') //按学号查找
{
printf("请输入该学生学号:");
scanf("%s",&num); //输入查找数据并用for语句进行逐个对比
for(i=0;i<stu_num;i++)
{
if(strcmp(num,student[i].num)==0)
{
break; //找到后结束循环
}
}
}
else if(a=='m'||a=='M') //按姓名查找
{
printf("请输入该学生姓名:");
scanf("%s",&name); //输入查找数据并用for语句进行逐个对比
for(i=0;i<stu_num;i++)
{
if(strcmp(name,student[i].name)==0)
{
break; //找到后结束循环
}
}
}
else if(a=='e'||a=='E') //退出删除函数
{
return;
}
else
{
goto st; //为了防止选错选项
}
if(i==stu_num) //未找到学生数据时提示警告并重新查找
{
warning();
goto st;
}
for(j=i;j<stu_num;j++) //通过for语句进行数据覆盖实现删除学生数据
{
student[j]=student[j+1];
}
stu_num-=1;
printf("该学生数据已删除,按任意键返回主菜单");
a=getch();
}

void menu() //目录函数
{
do
{
char a;
st: system("cls"); //清屏函数
printf("\t\t 欢迎使用学生成绩管理系统 1.22版\n\n\n\t\t\t(i)输入学生数据\n\n\t\t\t(d)删除学生数据\n\n\t\t\t(o)查看学生数据\n\n\t\t\t(s)查询学生数据\n\n\t\t\t(r)修改学生数据\n\n\t\t\t(e)退出系统\n\n\n请输入您要执行的选项:"); //主菜单
a=getch(); //获取输入选项
switch(a)
{
case 'i': //进入输入函数
case 'I':
input();
break;
case 'o': //进入输出函数
case 'O':
output();
break;
case 'r': //进入修改函数
case 'R':
revise();
break;
case 'd': //进入删除函数
case 'D':
del();
break;
case 's': //进入查找函数
case 'S':
search();
break;
case 'e': //退出程序
case 'E':
return;
default: //为了防止选错选项
goto st;
}
}while(1);

}

void main()
{
printf("组员:\n李东海 陈志锐\n凌华富 林继其\n杜德伟 钟鹏珲\n\n\n\n\t\t请稍后……"); //鸣谢栏
Sleep(7000);
menu();
}

这个是我们几个人做的期末作业,你可以拿去参考;如果windows函数不能用,就把他删除掉还有sleep这个也一起删除掉。

参考资料:自己想出来的

温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-06-22
MMMMMMMMMBVt:+..
,IVXVYIBttt+::+IVVMMMMMMRR:‘
,YYVYItMYti+i++:X+Rt:tXWRMR,
.YRiIYRMViitVXRWRYMI++++itMM..
.Y+,.,X::,,,YMMMMMMMMRVItXMti
:X+:,X:,. .,iiIRMWMMMBBRMMBY.
tR+:I:i:+Y:IitYVYMMMMMMMMRi.
.+RXt:,::.::XXIBMMMMMMMMM+:
,RRXitY+,.::RWMMMMMMMMt.
VYI:::,..:tVMMMMMMBY+.
.VBBW:::::,i.MMMMMBi:.
.tWRRVi:::.X:VMMMMMMY.
,+i+:,XYtt+:,i:,MMMBR:
...VV..:..:.tt::++:+,RMYMV.
:M:::..:,.:,,,.+t+++Ytt.,+:
tRt:,.:,.:,:.:+.,:++tit,
:tXt:,:,:.:.,,+,:+YRY,
:++:::.,:.:.::+:iMi
,Ri:::,:::::::+Ii
,+:Xii:,,::I:tit,.
:BBt,:+::,::i+.
:BWXX::::::iX.
:BWVIi++t+:V+
WBXtItii+iWI.
:MWIYIti+iVRY,
RBXVYItiiIYXWI,
:MRWWVYttttIIXWt.
.XMBRRXIti++itIXW,
.BMBBRVIi+::+ttXX.
,MMBRXYti:::+tIW:
tMMRWYti+++ittXV
+MRVYti+++ittWI
.VMWVtiiiiiitIR,
.XBBWVttttttttXRv
.,WBRBXVtttttttIWt
:RWXWBXYtttttttYR:
.iRWVIiBWYIttttttYW,
.tWVYti:WRVIttittIVV .:,,
tWVIi++:XRVIIttttIXY ..:YYtYi:tittV,
tXYti+++tWRVYttittYWIiIYYVItt:iXW+....
:WIt+++iXRBBVYItitIYXXYti+iIYt++:IMRi:.
.:Xti+:+tRWt:BVYItitIYWVIIIYXXWXVXYt+i+IV:
.tYi+::IWI:::BVVItitIXBRVIt:::::::tIVXRiXt
:Viii++i:itIXBXVttitVW, tBIX
.XIiXIttIVRBRBIItttIRX :VX
.,tXXWWWVi+. RXXItiYRV ..
,BWYi+IRX
tBYiitWB,
.WVtiiIRI
VWtiiiIB,
,BIiiiiWt
.BViiiiYV
XXtii+YV
iRiii+YY
:Btii+XI
Wtii+R:
XY+t+B.
YX+tYR.
tX+iWV
iXi+RI
tYiIXX
,XtiIXRt.
:BIVYRWIV
+RYXXWiYR.
iWIVYtXMV
tBYItRtM+
XBWttX:B:
YYBXXYR:,R:
tIYYYIY: i:
第2个回答  2009-06-23
很常规的题目
第3个回答  2009-06-23
#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=0;i<num;i++)

{

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

{

return i;

}

}

return -1;

}

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

int Student_SearchByName(char name[])

{

int i;

for (i=0;i<num;i++)

{

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=index;i<num-1;i++)

{

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=0;i<num;i++)

{

for (j=1;j<num-i;j++)

{

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=0;i<num;i++)

{

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=0;i<num;i++)

{

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=0;i<num;i++)

{

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();

}

}
第4个回答  2009-06-23
好麻烦。。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网