C语言课程
报告参考封面
江西工业
职业技术学院
班 级: 电 子 111 学 号: 20110996 设 计 人: 刘 欣 琦 指导老师: 周 杨 萍 时 间: 第17周(2012.12.31~2013.1.4)
江西工业工程职业技术学院
一、实训目的:
, C语言程序设计实训是C语言程序设计课程教学的重要组成部分。本课程通过提供学生一个实训练习的机会,巩固、提高学生的基本编程能力,同时通过训练编写综合程序的方式,提高学生
问
和解决问题的能力,为后续课程的学习打下良好的基础。 , 根据所选题目首先进行算法分析,根据实现的功能进行数据分析,设计相应的数据结构,同时为贯彻“程序设计=算法+数据结构”的思想,要求学生在课下完成流程图的设计,然后根据流程图写出实训代码。
, 训练学生使用结构体解决实际问题的能力,提高C语言的编程水平。总体要求学生使用结构体数组实现对问题中数据的组织。程序结构采用结构化程序设计
。main函数的编写应简洁、清晰,对数据的各个操作都用函数来实现。程序的界面设计风格建议采用文字菜单的形式。
二、实训题目和程序清单,包括程序运行截图界面,:
实训内容:学生成绩管理系统。
参考运行主界面如下:
具体要求:出现上述界面
后,用户可以通过输入1-6之间的数字完成所提示的功能。循环往复,直到输入7,退出系统。
提示:在使用字符界面的菜单编程时,需要清屏,可以使用system("cls")函数将屏幕清屏。需要退出系统时,可以使用exit(0)函数退出。需要暂停程序的执行时,可以使用system("pause")函数暂停。使用这些函数时应包含"stdlib.h"系统函数头文件。
江西工业工程职业技术学院
本系统具有学生的基本信息(学号、姓名、性别、3门课程成绩、总分和平均分),能够根据需要追加、查询、修改、删除、统计人数并浏览学生的基本信息。具体功能如下: 1(初始化信息(学生信息的输入,包括学号、姓名、性别和3门课程成绩) ; 2(追加学生信息(继续添加学生的基本信息,要求学号不重复);
3(根据学号查询(完成按学号查询指定学生的基本信息);
4(根据学号修改(完成按学号修改指定学生的基本信息);
5(根据学号删除(完成按学号删除指定学生的基本信息);
6(统计人数并浏览(完成按性别统计人数,并显示所有学生的信息); 7(退出(退出系统)。
运行过程截图
江西工业工程职业技术学院
主界面初始化
追加学生信息
江西工业工程职业技术学院
根据学号查询
江西工业工程职业技术学院
根据学号修改
江西工业工程职业技术学院
根据学号删除
统计人数并浏览
江西工业工程职业技术学院
#include "stdio.h" //输入输出函数头文件
#include "stdlib.h" //系统函数头文件
#include "string.h" //字符串函数头文件
#define N 100 //定义常量n的值为100
/*******定义结构体*********/
struct student
{char xh[3]; //学号
char name[20]; //姓名
char sex[2]; //性别
int score[3]; //三门课程
int sum; //总分
float ave; //平均分
}stu[N];
int count=-1; //计数,统计人数
void csh() //初始化信息,输入几位学生的数据 ## 难易程序:容易 ## {
strcpy(stu[0].xh,"01"); //给第1位学生的学号赋值
strcpy(stu[0].name,"林"); //给第1位学生的姓名赋值
strcpy(stu[0].sex,"男"); //给第1位学生的性别赋值
stu[0].score[0]=80,stu[0].score[1]=76,stu[0].score[2]=67; //给第1位学生的三门课程赋值
stu[0].sum =stu[0].score[0]+stu[0].score[1]+stu[0].score[2]; //统计第1位学生的个人成绩总分
stu[0].ave =(float)stu[0].sum/3; //统计第1位学生的个人成绩平均分
/*已对第一位学生的所有字段进行了初始化(赋值),请按此方法再输入几位学生的信息*/
strcpy(stu[1].xh,"02");
strcpy(stu[1].name,"俊");
strcpy(stu[1].sex,"男");
stu[1].score[0]=81,stu[1].score[1]=77,stu[1].score[2]=88;
stu[1].sum =stu[1].score[0]+stu[1].score[1]+stu[1].score[2];
江西工业工程职业技术学院
stu[1].ave =(float)stu[1].sum/3;
strcpy(stu[2].xh,"03");
strcpy(stu[2].name,"杰");
strcpy(stu[2].sex,"男");
stu[2].score[0]=82,stu[2].score[1]=71,stu[2].score[2]=87;
stu[2].sum =stu[2].score[0]+stu[2].score[1]+stu[2].score[2];
stu[2].ave =(float)stu[2].sum/3;
strcpy(stu[3].xh,"04");
strcpy(stu[3].name,"大");
strcpy(stu[3].sex,"女");
stu[3].score[0]=82,stu[3].score[1]=97,stu[3].score[2]=77;
stu[3].sum =stu[3].score[0]+stu[3].score[1]+stu[3].score[2];
stu[3].ave =(float)stu[3].sum/3;
strcpy(stu[4].xh,"05");
strcpy(stu[4].name,"帅");
strcpy(stu[4].sex,"男");
stu[4].score[0]=82,stu[4].score[1]=77,stu[4].score[2]=87;
stu[4].sum =stu[4].score[0]+stu[4].score[1]+stu[4].score[2];
stu[4].ave =(float)stu[4].sum/3;
strcpy(stu[5].xh,"06");
strcpy(stu[5].name,"酷");
strcpy(stu[5].sex,"女");
stu[5].score[0]=72,stu[5].score[1]=97,stu[5].score[2]=67;
stu[5].sum =stu[5].score[0]+stu[5].score[1]+stu[5].score[2];
stu[5].ave =(float)stu[5].sum/3;
strcpy(stu[6].xh,"07");
strcpy(stu[6].name,"哥");
江西工业工程职业技术学院
strcpy(stu[6].sex,"女");
stu[6].score[0]=77,stu[6].score[1]=67,stu[6].score[2]=67;
stu[6].sum =stu[6].score[0]+stu[6].score[1]+stu[6].score[2];
stu[6].ave =(float)stu[6].sum/3;
printf("\n ******************初始化成功~******************\n");
system("pause");
count=6;
}
void add()//追加学生数据(学号不能重复、成绩必须保证在0-100之间、性别必须是"男"或"女")## 难易程序:一般 ##
{ int i;
char z;
system("cls");//清屏,清除屏幕上的所有信息
do
{
count++;
do
{
printf(" 请输入学生的学号:");
scanf("%s",stu[count].xh);
for(i=0;i<=count-1;i++)
{ if(strcmp(stu[i].xh,stu[count].xh)==0)
{
printf(" 输入学号重复,请重新输入:^-^!!\n");
break;
}
}
江西工业工程职业技术学院
if(i<=count-1)
continue;
else
break;
}
while(1);
printf(" 请输入学生的姓名:");
scanf("%s",stu[count].name);
do
{
printf(" 请输入学生的性别:");
scanf("%s",stu[count].sex);
if(strcmp(stu[count].sex,"男")!=0 )
{ if (strcmp(stu[count].sex,"女")!=0)
{ printf(" ××警告××:性别输入有误,请重新输入!!\n");
continue;
}
}
break;
}
while(1);
do
{
printf(" 请输入学生的第一门课程(0-100):");
scanf("%d",&stu[count].score[0]);
if(stu[count].score[0]<0||stu[count].score[0]>100)
//||stu[count].score[0]>='A'||stu[count].score[0]<='Z'||stu[count].score[0]>='a
'||stu[count].score[0]<='z')
{
printf(" 输入有误,请重新输入!!\n");
江西工业工程职业技术学院
continue;
}
break;
}
while(1);
do
{
printf(" 请输入学生的第二门课程(0-100):");
scanf("%d",&stu[count].score[1]);
if(stu[count].score[1]<0||stu[count].score[1]>100)
{
if(stu[count].score[1]>'A'||stu[count].score[1]<'z')
{
printf(" 输入有误,请重新输入!!\n");
continue;
}
}
break;
}
while(1);
do
{
printf(" 请输入学生的第三门课程(0-100):");
scanf("%d",&stu[count].score[2]);
if(stu[count].score[2]<0||stu[count].score[2]>100)
{
if(stu[count].score[2]>'A'||stu[count].score[2]<'z')
{
printf(" 输入有误,请重新输入!!\n");
continue;
}
}
江西工业工程职业技术学院
break;
}
while(1);
stu[count].sum
=stu[count].score[0]+stu[count].score[1]+stu[count].score[2];
stu[count].ave =(float)stu[count].sum/3;
printf(" 还需要添加吗?(y/n)");
scanf("\n%c",&z);
}
while(z=='y'||z=='Y');
}
void find()//根据学号查询(若有此学生则显示出来,否则给出相应提示)## 难易程序:较难 ##
{ int i;
char number[3],z;
do
{
system("cls");//清屏,清除屏幕上的所有信息
printf(" 请输入要查找学生的学号:");
scanf("%s",number);
for(i=0;i<=count;i++)
{ if(strcmp(stu[i].xh,number)==0)
{ printf(" 学号 性名 性别 课程1 课程2 课程3 总分 平均分\n");
printf("
--------------------------------------------\n");
printf(" %s %s %s %d %d %d %d %.1f\n",stu[i].xh
,stu[i].name,stu[i].sex,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].
sum,stu[i].ave);
江西工业工程职业技术学院
break;
}
}
if(i>count) printf(" 查无此人~\n");
system("pause");
printf(" 还需要查询吗?(y/n)");
scanf("\n%c",&z);
}
while(z=='y'||z=='Y');
}
void edit()//根据学号修改(若有此学生则显示出来,并且重新输入数据,否则给出相应提示)## 难易程序:较难 ##
{
int i;
char num[3],z,q;
do
{
system("cls");//清屏,清除屏幕上的所有信息
printf(" 请输入要修改的学生学号:");
scanf("%s",num);
for(i=0;i<=count;i++)
{ if(strcmp(stu[i].xh,num)==0)
{ printf(" 学号 性名 性别 课程1 课程2 课程3 总分 平均分\n");
printf(" --------------------------------------------\n");
printf(" %s %s %s %d %d %d %d %.1f\n",stu[i].xh
,stu[i].name,stu[i].sex,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].
sum,stu[i].ave);
江西工业工程职业技术学院
printf(" 你确定要修改吗,(y/n)");
scanf("\n%c",&q);
if(q=='y'||q=='Y')
{
printf(" 请输入学生的学号:");
scanf("%s",stu[i].xh);
printf(" 请输入学生的姓名:");
scanf("%s",stu[i].name);
printf(" 请输入学生的性别:");
scanf("%s",stu[i].sex);
printf(" 请输入学生的第一门课程:");
scanf("%d",&stu[i].score[0]);
printf(" 请输入学生的第二门课程:");
scanf("%d",&stu[i].score[1]);
printf(" 请输入学生的第三门课程:");
scanf("%d",&stu[i].score[2]);
stu[i].sum =stu[i].score[0]+stu[i].score[1]+stu[i].score[2]; //统计第3位学生的个人成绩总分
stu[i].ave =(float)stu[i].sum/3;
printf(" 修改完毕~~~");
break;
}
break;
}
}
if(i>count) printf(" 查无此人~\n");
system("pause");
printf(" 还需要修改吗?(y/n)");
scanf("\n%c",&z);
}
while(z=='y'||z=='Y');
}
江西工业工程职业技术学院
void del()//根据学号删除(若有此学生则显示出来,并允许删除,否则给出相应提示)## 难易程序:较难 ##
{
int i,j;
char number[3],z,q;
do
{
system("cls");//清屏,清除屏幕上的所有信息
printf(" 请输入你要删除人的学号:\n");
scanf("%s",number);
for(i=0;i<=count;i++)
{ if(strcmp(stu[i].xh,number)==0)
{
printf(" 学号 性名 性别 课程1 课程2 课程3 总分 平均分\n");
printf("
--------------------------------------------\n");
printf(" %s %s %s %d %d %d %d %.1f\n",stu[i].xh
,stu[i].name,stu[i].sex,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].
sum,stu[i].ave);
printf(" 你确定要删除吗,(y/n)");
scanf("\n%c",&q);
if(q=='y'||q=='Y')
{ for(j=i;j<=count;j++)
{ strcpy(stu[j].xh,stu[j+1].xh);
strcpy(stu[j].name,stu[j+1].name);
strcpy(stu[j].sex,stu[j+1].sex);
stu[j].score[0]=stu[j+1].score[0];
stu[j].score[1]=stu[j+1].score[1];
stu[j].score[2]=stu[j+1].score[2];
stu[j].sum =stu[j+1].sum;
江西工业工程职业技术学院
stu[j].ave =(float)stu[j+1].ave;
}
strcpy(stu[count].xh,"\0");
strcpy(stu[count].name,"\0");
strcpy(stu[count].sex,"\0");
stu[count].score[0]=0;
stu[count].score[1]=0;
stu[count].score[2]=0;
stu[count].sum =0;
stu[count].ave =0;
count--;
printf(" 删除成功!!\n");
break;
}
}
}
system("pause");
printf(" 还需要删除吗?(y/n)");
scanf("\n%c",&z);
}
while(z=='y'||z=='Y');
}
void tj()//统计男女人数和总人数,并浏览所有学生的信息 ## 难易程序:一般 ##
{ int i,n=0,m=0;
system("cls");
江西工业工程职业技术学院
printf(" \n");
printf("\n *************《学生成绩管理系统》 **************\n");
for(i=0;i<=count;i++)
{
if(!strcmp(stu[i].sex,"男"))
n=n+1;
else
m=m+1;
}
printf(" 制作人:刘欣琦\n");
printf(" \n");
printf(" 男:%d 女:%d 总
数:%d\n\n",n,m,n+m);
printf(" -------------------------------------------------\n");
printf(" 》学号 姓名 性别 课程1 课程2 课程3 总分 平均分《\n");
printf(" -------------------------------------------------\n");
for (n=0;n<=count;n++)
printf(" 》 %s %s %s %d %d %d %d %.1f
《\n",stu[n].xh,stu[n].name,stu[n].sex,stu[n].score[0],stu[n].score[1],stu[n].score[2],stu[n].sum,stu[n].ave);
printf(" -------------------------------------------------\n");
system("pause");
}
void main()//主函数,主界面
{ int xz;
do
{ system("cls"); //清屏,清除屏幕上的所有信息
printf("\n \n");
printf("\n *************《学生成绩管理系统》
江西工业工程职业技术学院
**************\n");
printf(" 制作人:刘欣琦\n");
printf("
------------------------------------------------\n");
printf(" 1-----初始化信息 \n");
printf(" 2-----追加学生信息 \n");
printf(" 3-----根据学号查询 \n");
printf(" 4-----根据学号修改 \n");
printf(" 5-----根据学号删除 \n");
printf(" 6-----统计人数并浏览 \n");
printf(" 7-----退 出 \n");
printf("
************************************************\n");
printf(" 请输入您的选择(1-7):");
scanf("%d",&xz);
switch(xz)
{ case 1:csh();break; //执行子函数csh(完成初始化功能)
case 2:add();break; //执行子函数add(完成追加学生信息)
case 3:find();break; //执行子函数find(完成根据学号查询)
case 4:edit();break; //执行子函数edit(完成根据学号修改)
case 5:del();break; //执行子函数del(完成根据学号删除)
case 6:tj();break; //执行子函数tj(完成统计并浏览)
case 7:printf("\n -----------谢谢,欢迎下次光临~----------\n\n");
default:exit(0);//退出系统,exit(0)函数功能是退出程序。
}
}
while(1);
}
三、实训心得体会:
, 一个简单的运行程序代码就让我折腾几天,C语音真的难以参透。
, 通过这一周实训,我发现C语音的强大,我却如此渺小。
江西工业工程职业技术学院
, 还是学的很吃力,想努力的学好,但是无从下手。
, 下学期一定要选修老师的C语音。