福建师范大学人民武装学院
C语言程序设计报告书
设计名称:学生成绩管理系统
专业:软件工程
指导老师:陈琳
姓名:黄强
学号: 119052012026
20##-415
一、实验目的
1.在编辑应用程序过程中,逐步加深对C语言编程的理解;
2.加强实践的能力,动手能力,同时进一步对所学的知识进行巩固;
3.培养初步编程的能力,为以后的学习奠定基础。
二、实验内容
运用所学的C语言知识编辑一个应用程序:学习成绩管理系统
三.系统软件环境:
本程序主要运行在: Visual C++ 6.0
Turbo C/C++ 3.0
四.课程设计题目:
学生成绩管理系统
程序说明:有N个学生,每个学生的数据包含学号(不重复)姓名,性别,课程号,课程名,学分和课程的三种得分。试设计一学生成绩 管理系统,使之能提供以下功能:
(1)主菜单
(2)各菜单项功能
①录入:输入学生的学号、姓名性别,课程号,课程名,学分和课程的三种得分
②成绩查询:
A.基本信息查询
*按学号查询学生记录。
*按名字查询学生纪录。
B.成绩查询
*按学号查询学生记录。
*按名字查询学生纪录。
③纪录删除
*按输入的学号删除
④排序
A.综合成绩升序。
B.综合成绩降序。
C.学分降序。
D.学分升序。
五.数据结构设计描述:↓
↓
六.结构体的定义和作用
struct student //定义学生信息
{
int no; // 学号
char name[20]; //姓名
char sex[4]; //性别
int num; //课程号
char scn[20]; //课程名
int score; //学分
float score1; //成绩1
float score2; //成绩2
float score3; //成绩3
float ave; //实得学分
float sum; //总分
七.系统各函数的功能,、相互调用关系
1.函数实现功能说明:
(1)menu函数
是定义一个菜单函数,其功能在于输出菜单界面供使用者选择。
(2)input函数
是定义用于输入学生信息。
(3)select 函数
是定义用于查询学生信息。包括学号、姓名及各科成绩。
(4)del函数
按输入的学号删除
(5)paixu函数
设置新菜单,并调用四个不同排序输出函数。
(6)保存函数
保存信息。
八.心得体会
C语言是一种较为基础和普遍的编程语言,应用相当广泛,这次课程设计的要求与C语言的广泛应用相比较还有很大的差距。我们对于C语言的理解和使用还处在一个初级的阶段,我们要想掌握它,要学习的还很多,同时要懂得创新,许多的编程方法都是人们一步一步总结出来的,我想我们也要努力拓展自己的思维,努力去寻求新的方法,以创造出更为完善的应用程序。
九.程序:
#include<stdio.h>
#include<conio.h> /*清屏*/
#include <stdlib.h> /*显示目录*/
#include<string.h>
#define n 10
void zhjx();
void menu();
void input();
void check();
void fun();
void fun2();
void fun3();
void fun4();
void del();
void paixu();
void zhsx();
void zhjx();
void xfjx();
void xfsx();
void save();
struct student //定义学生信息
{
int no; // 学号
char name[20]; //姓名
char sex[4]; //性别
int num; //课程号
char scn[20]; //课程名
int score; //学分
float score1; //成绩1
float score2; //成绩2
float score3; //成绩3
float ave; //实得学分
float sum; //总分
};
struct student stu[n],*p,t;
int now=0,i,j,k,l;
char ch;
void main()
{
int h,flag1,flag2;
char name[20]="hq",password[10]="111";
char person[20],password1[10];
printf ("\t\t ******** 欢迎进入学生成绩管理系统!********\n\n");
printf ("\t\t\t 用 户 登 录\n\n");
for(h=0;h!=5;)
{
printf("\t\t\t\t 用户名:");
gets(person);
flag1=strcmp(person,name);
printf("\t\t\t\t 密码:");
gets(password1);
flag2=strcmp(password,password1);
if(flag1==0 && flag2==0)
{
printf("\t\t\t\t 登陆成功!\n\n");
menu();
break;
}
else
{
printf ("\t\t\t 用户名或密码错误!\n\n");
printf ("\t\t\t 请注意:您还剩%d次机会!\n\n",4-h);
h++;
}
}
if (h=5)
printf ("对不起,您输入的用户名或密码有误,已被强制退出。\n");
}
void menu()
{
int as;
char ch;
do{
printf("\n\n\n\n\t\t****&****&****&****&****&****&****&****&****&****");
start: printf("\n\n\n\n\t\t\t 欢迎使用学生成绩管理系统\n");
printf("\n\n\n\n\t\t******************按任意键继续********************");
ch=getch();
}
while(!ch);
system("cls");
/*以下为功能选择模块*/
do{printf("学生管理系统\n");
printf("\t\t");
printf("1------学生成绩录入\n\t\t");
printf("2------查询\n\t\t");
printf("3------删除学生记录\n\t\t");
printf("4------排序\n\t\t");
printf("5------保存退出\n\t\t");
printf("6------退出\n\t\t");
printf("\t\t\t\t选择功能选项(输入所选功能前的数字):");
scanf("%d",&as);
switch(as)
{case 1:input();break;
case 2:check();break;
case 3:del();break;
case 4:paixu();break;
case 5:save();break;
case 6:system("exit");exit(0);break;
default:system("cls");
goto start;
}}while(1);}
void input() /*学生信息录入模块*/
{
int i=0;
char ch;
do
{
printf("\t\t\t\t1.录入学生信息\n输入第%d个学生的信息\n",i+1);
printf("\n输入8位的学生学号:");
scanf("%u",&stu[i].no);
fflush(stdin);
printf("\n输入学生姓名:");
fflush(stdin);
gets(stu[i].name);
printf("\n输入学生性别:");
fflush(stdin);
gets(stu[i].sex);
fflush(stdin);
printf("\n输入学生课程号:");
scanf("%d",&stu[i].num);
fflush(stdin);
printf("\n输入学生课程名:");
gets(stu[l].scn);
;fflush(stdin);
printf("\n输入课程学分:");
scanf("%d",&stu[i].score);
printf("\n输入学生平时成绩:");
fflush(stdin);
scanf("%f",&stu[i].score1);
printf("\n输入学生实验成绩:");
fflush(stdin);
scanf("%f",&stu[i].score2);
printf("\n输入学生卷面成绩:");
fflush(stdin);
scanf("%f",&stu[i].score3);
printf("\n\n");
if(stu[i].score2>0)
stu[i].sum=stu[i].score1*0.15+stu[i].score2*0.15+stu[i].score3*0.7;
else
stu[i].sum=stu[i].score1*0.3+stu[i].score3*0.7;
k=stu[i].sum/10;
switch(k)
{case 10:(float)stu[i].ave=(float)stu[i].score;break;
case 9:(float)stu[i].ave=(float)stu[i].score;break;
case 8:(float)stu[i].ave=(float)stu[i].score*0.8;break;
case 7:(float)stu[i].ave=(float)stu[i].score*0.7;break;
case 6:(float)stu[i].ave=(float)stu[i].score*0.6;break;
default:(float)stu[i].ave=0.0;}
i++;
now=i;
printf("是否继续输入?(Y/N)");
fflush(stdin);
ch=getch();
system("cls");
}
while(ch!='n'&&ch!='N');
system("cls");
}
void check() //查询
{printf("————查 询————\n");
printf("\t\t*学生基本信息查询*\n");
printf("\t\t");
printf("1--按学号查询\n\t\t");
printf("2--按姓名查询\n\t\t");
printf("*学生成绩查询*\n");
printf("\t\t");
printf("3--按学号查询\n\t\t");
printf("4--按姓名查询\n\t\t");
printf("0--返回主菜单\n\t\t");
printf("请选择:");
scanf("%d",&i);
switch(i)
{
case 0:menu();break; //调用主菜单函数,表示返回主菜单
case 1:fun();break; //调用函数fun1,表示按学号查询学生基本信息
case 2:fun2();break; //调用函数fun2,表示按姓名查询学生基本信息
case 3:fun3();break; //调用函数fun3,表示按学号查询学生成绩
case 4:fun4();break; //调用函数fun4,表示按姓名查询学生成绩
};}
void fun() //按学号查询1
{int i,j;
printf("请输入要查询同学的学号:");
scanf("%d",&j);
for(i=0;i<now;i++) //从第一名学生开始
{
if(stu[i].no==j) //查找与输入学号相同的学号并输出
{
printf("学号:%d\n",stu[i].no);
printf("姓名:%s\n",stu[i].name);
printf("性别:%s\n",stu[i].sex);
}
} check();
};
void fun2() //按姓名查询1
{
char name[20];
printf("请输入要查询同学的姓名:");
scanf("%s",&name);
for(i=0;i<now;i++)
{
if(strcmp(stu[i].name,name)==0)
{printf("学号:%d\n",stu[i].no);
printf("姓名:%s\n",stu[i].name);
printf("性别:%s\n",stu[i].sex);
}
}
};
void fun3() //按学号查询2
{int i;
printf("请输入要查询同学的学号:");
scanf("%d",&j);
for(i=0;i<now;i++)
{
if(stu[i].no==j)
{
printf("平时成绩%f\n",stu[i].score1);
printf("实验成绩:%f\n",stu[i].score2);
printf("卷面成绩:%f\n",stu[i].score3);
printf("总分:%f\n",stu[i].sum);
printf("学分:%f\n",stu[i].ave);}
}
check();
}
void fun4()//按姓名查询2
{int i;
char name[20];
printf("请输入要查询同学的姓名:");
scanf("%s",&name);
for(i=0;i<now;i++)
{
if(strcmp(stu[i].name,name)==0)
{
printf("平时成绩%f\n",stu[i].score1);
printf("实验成绩:%f\n",stu[i].score2);
printf("卷面成绩:%f\n",stu[i].score3);
printf("总分:%f\n",stu[i].sum);
printf("学分:%f\n",stu[i].ave); }
}
check();
};void del() /*删除数据函数*/
{unsigned long inum;
int i;
printf("输入要删除学生的学号:");
fflush(stdin);
scanf("%u",&inum);
for(i=0;i<now;i++)
{
if(stu[i].no=inum)
{
if(i==now)now-=1;
else
{
stu[i]=stu[now-1];
now-=1;
}
break;
}
}
system("cls");
menu();
};
void paixu() //排序
{
int i;
printf("————排 序————\n");
printf("\t\t");
printf("1--按综合成绩升序\n\t\t");
printf("2--按综合成绩降序\n\t\t");
printf("3--按实得学分升序\n\t\t");
printf("4--按实得学分降序\n\t\t");
printf("0--返回主菜单\n\t\t");
printf("请选择:");
scanf("%d",&i);
switch(i)
{
case 0:menu();break;
case 1:zhsx();break;
case 2:zhjx();break;
case 3:xfsx();break;
case 4:xfjx();break;
}
};
void zhsx()//综合成绩升序
{ int i,j;
for(i=0;i<now;i++)
for(j=now-1;j>i;j--)
if(stu[j].sum<stu[j-1].sum)
{
t=stu[j];
stu[j]=stu[j-1];
stu[j-1]=t;
}
for(i=0;i<now;i++)
{printf("学号:%d",stu[i].no);
printf("姓名:%s",stu[i].name);
printf("性别:%s",stu[i].sex);
printf("平时成绩%f",stu[i].score1);
printf("实验成绩:%f",stu[i].score2);
printf("卷面成绩:%f",stu[i].score3);
printf("总分:%f\n",stu[i].sum);
}paixu();
};
void zhjx()//综合成绩降序
{ int i,j;
for(i=0;i<now;i++)
for(j=now-1;j>i;j--)
if(stu[j].sum>stu[j-1].sum)
{
t=stu[j];
stu[j]=stu[j-1];
stu[j-1]=t;
}
for(i=0;i<now;i++)
{printf("学号:%d",stu[i].no);
printf("姓名:%s",stu[i].name);
printf("性别:%s",stu[i].sex);
printf("平时成绩%f",stu[i].score1);
printf("实验成绩:%f",stu[i].score2);
printf("卷面成绩:%f",stu[i].score3);
printf("总分:%f\n",stu[i].sum);
}paixu();
};
void xfjx()//学分降序
{ int i,j;
for(i=0;i<now;i++)
for(j=now-1;j>i;j--)
if(stu[j].ave>stu[j-1].ave)
{
t=stu[j];
stu[j]=stu[j-1];
stu[j-1]=t;
}
for(i=0;i<now;i++)
{printf("学号:%d\n",stu[i].no);
printf("姓名:%s",stu[i].name);
printf("性别:%s",stu[i].sex);
printf("平时成绩%f",stu[i].score1);
printf("实验成绩:%f",stu[i].score2);
printf("卷面成绩:%f",stu[i].score3);
printf("总分:%f\n",stu[i].sum);}
paixu();
};
void xfsx()//学分升序
{ int i,j;
for(i=0;i<now;i++)
for(j=now-1;j>i;j--)
if(stu[j].ave<stu[j-1].ave)
{
t=stu[j];
stu[j]=stu[j-1];
stu[j-1]=t;
}
for(i=0;i<now;i++)
{printf("学号:%d\n",stu[i].no);
printf("姓名:%s",stu[i].name);
printf("性别:%s",stu[i].sex);
printf("平时成绩%f",stu[i].score1);
printf("实验成绩:%f",stu[i].score2);
printf("卷面成绩:%f",stu[i].score3);
printf("总分:%f\n",stu[i].sum);}
paixu();
};
void save() /*保存数据函数*/
{
FILE *fp;
int i;
char filepath[20];
printf("输入要保存的文件路径:");
fflush(stdin);
gets(filepath);
if((fp=fopen(filepath,"w"))==NULL)
{
printf("\n保存失败!");
exit(0);
}
for(i=0;i<now;i++)
{
fprintf(fp,"\t%u%s\t%s\t%u\t%s\t%u\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",
stu[i].no,stu[i].name,stu[i].sex,stu[i].num,stu[i].scn,stu[i].score,stu[i].score1,stu[i].score2,
stu[i].score3,stu[i].ave,stu[i].sum);
}
fclose(fp);
printf("学生信息已保存在%s中!\n",filepath);
system("pause");
system("cls");
}