C语言程序设计实训报告实训课名称:C语言程序设计
实训项目名称:学生成绩管理查询系统专业名称:电子工程学院
系别:电子信息工程技术
班级:110111
学号:01
姓名:王倩
一.实验名称:学生成绩管理查询系统
二.实验目的:
巩固和加深对C语言基本知识的理解与掌握;掌握C语言编程和程序调试的基本技能;利用C语言进行基本软件设计;提高运用C语言解决实际问题的能力;灵活使用 C 语言进行程序编写,巩固有关语句,指针,结构体,链表,文件操作等概念和方法。提高调试程序的技能,提高软件编写的能力
三.实验要求:
使用选择结构、循环结构、函数、预处理、链表、结构体数组处理等综合应用的方法。实现对学生数据包括:学号,姓名,性别,年龄,成绩的统计和查询功能。如添加数据;删除数据;查询数据;修改数据;链表数据等。
四.实验内容:
1.定义一个结构体数组存放学生的信息;
2.用循环结构对成绩进行分类,统计;
3.设计字浮串函数进行查询信息;
源代码
#include
#include
#include
int INDEX[32];
struct STUDENT{
int id;
int age;
int chinese,math,english;
char name[21];
}students[32];
void page_title(char *menu_item){
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=0;n<32;n++)
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=0;n<32;n++)
{
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=0;n<32;n++)
{
if(students[n].id!=0)
{
printf("学号:%d 姓名:%s 成绩:",students[n].id,students[n].name); scanf("%d",&t);
switch(s)
{
case 1 : students[n].chinese=t;break;
case 2 : students[n].math=t;break;
case 3 : students[n].english=t;break;
}
}
}
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=0;n<32;n++)
{
switch(nn)
{
case'1' : t[n]=students[n].id;break;
case'2' : t[n]=students[n].chinese;break;
case'3' : t[n]=students[n].math;break;
case'4' : t[n]=students[n].english;break;
case'5' :
t[n]=students[n].chinese+students[n].math+students[n].english;break; }
}
for(n=0;n<32;n++)
{
x=0;
p=-1;
for(m=0;m<32;m++)
{
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语文-2\t数学-3\t英语-4\t总分-5\n");
for(n=0;n<32;n++)
{
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].englis h);
}
}
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;
}
五.运行结果与分析:
》》》》学生管理系统《《《《
-操作选单-
1 录入学生基本信息
2 修改学生基本信息
3 注销学生基本信息
4 录入成绩
5 修改成绩
6 浏览…
0退出
六.实验中遇到的问题、解决方法及体会:
问题:
1.不能熟练掌握结构体数组的使用方法
2.对循环语句的使用过程仍然有些陌生
3.不清楚查询过程中用到什么函数
解决方法:
1.多做练习,熟练掌握结构体数组的使用方法
2.复习各中循环结构语句,并掌握之
体会:
1.要熟练掌握结构体数组指针等重要知识点的使用方法
2.对实际问题要仔细分析,并合理利用语言知识表达对实际问题要仔细分析要经常编程上机操作.
3.要经常编程上机操作.查漏补缺
4.程序尽可能简单易懂,养成良好的程序编写风格程序尽可能简单易懂体