实验目的
1、复习C语言中结构体类型的定义方法,掌握数据元素类型的定义方法;
2、巩固结构体变量成员的“.”引用和“->”引用;
3、掌握C语言函数的声明、定义和调用。
实验内容
学生信息管理:某年级共有n个学生,每个学生的信息构成一个记录,如下表所示,学生的学号作为关键字(key)。这n个记录构成了一个长度为n的线性表。现要求完成如下操作:
学号 |
姓名 |
性别 |
英语 |
计算机 |
高数 |
总分 |
平均分 |
4256007 |
贝小鹏 |
男 |
76 |
68 |
84 |
|
|
4256012 |
黄坚 |
女 |
87 |
64 |
66 |
|
|
4256020 |
林继磊 |
女 |
78 |
69 |
78 |
|
|
4256026 |
潘耀 |
男 |
54 |
66 |
52 |
|
|
- 输入学生的信息,建立学生表。
- 输出所有学生的信息。
- 查找:在学生表中查找指定学生的信息,如果找到就显示该生的所有信息,否则显示“该学生的信息不存在,查找失败”。
- 修改:在学生表中修改指定学生的信息,然后显示所有学生信息,如果表中不存在该生就显示“该生的信息不存在,修改失败”。
- 添加:在当前学生表的末尾添加一个记录(记录数增加1)例如,添加记录为:4256033 吴强 男 82 85 90
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 100
typedef struct student{
char num[10];//学号
char name[20];//姓名
char sex[10];//性别
float grade1;//英语、计算机、高数成绩
float grade2;
float grade3;
double total;//总分
double average;//平均分
}STU;
STU stu[MAXSIZE];//数组静态分配
STU stu1[1];//临时记录输入的学生信息
int lenth=0;
void InputStu(STU stu[],int n);//输入所有学生的信息,建立学生表
void PrintStu();//输出所有学生的信息
void SearchNum(char number[],int n);//按学号查找学生的信息
void ScanfStu();//用户输入语句
void ModifyStu();//按学号修改学生的信息
void InsertStu();//添加新学生
int main(){
int n,choice;
char number[10];
while (1){
printf("*************************************\n");
printf("欢迎使用学生成绩管理系统\n");
printf("[1] 输入所有学生信息\n");
printf("[2] 输出所有学生成绩\n");
printf("[3] 按学号查找某个学生信息\n");
printf("[4] 按学号修改某个学生信息\n");
printf("[5] 添加某个学生信息\n");
printf("[0] 退出程序\n");
printf("请输入您的选择(0 - 5):");
scanf("%d",&choice);
printf("*************************************\n");
switch (choice)
{
case 1://录入;
printf("请输入您要输入的学生个数:");
scanf("%d",&n);
InputStu(stu,n);
break;
case 2://输出;
PrintStu();
break;
case 3://根据学号查找
printf("请输入您要查找的学生学号:");
scanf("%s",number);
SearchNum(number,10);
break;
case 4://根据学号修改
printf("请输入您要修改的学生信息:\n");
ModifyStu();
break;
case 5://添加学生
printf("请输入您要添加的学生信息:\n");
InsertStu();
break;
case 0://退出程序
printf("退出程序\n");
printf("程序结束,谢谢使用!\n");
exit(0);
default:
printf("您输入的菜单有误。请重新输入!\n");
}
}
return 0;
}
void InputStu(STU stu[],int n){
int i;
for(i=0;i<n;i++){
printf("输入的第%d个学生信息\n",i+1);
printf("学号:");
scanf("%s",stu[i].num);
printf("姓名:");
scanf("%s",stu[i].name);
fflush(stdin);//清空键盘缓冲区,回车键enter被保留在键盘缓冲区,被第二个scanf接收,导致第二个scanf无法被输入。
printf("性别:");
scanf("%s",stu[i].sex);
printf("英语成绩:");
scanf("%f",&stu[i].grade1);
printf("计算机成绩:");
scanf("%f",&stu[i].grade2);
printf("高数成绩:");
scanf("%f",&stu[i].grade3);
}
lenth=n;
}
void PrintStu(){
int i;
printf("学号\t姓名\t性别\t英语\t计算机\t高数\t总分\t平均分\n");
printf("------------------------------------------------------------\n");
for(i=0;i<MAXSIZE;i++){
if(strlen(stu[i].num)!=0){
printf("%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2lf\t%.2lf\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].grade1,stu[i].grade2,stu[i].grade3,stu[i].grade1+stu[i].grade2+stu[i].grade3,(stu[i].grade1+stu[i].grade2+stu[i].grade3)/3);
}
}
printf("------------------------------------------------------------\n");
}
void SearchNum(char number[],int n){
int i;
int res=-1;
for(i=0;i<MAXSIZE;i++){
if(strcmp(stu[i].num,number)==0){
res=i;
break;
}
}
if(res==-1){
printf("没有此学生!");
}
else{
printf("学号\t姓名\t性别\t英语\t计算机\t高数\t总分\t平均分\n");
printf("------------------------------------------------------------\n");
printf("%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2lf\t%.2lf\n",stu[res].num,stu[res].name,stu[res].sex,stu[res].grade1,stu[res].grade2,stu[res].grade3,stu[res].grade1+stu[res].grade2+stu[res].grade3,(stu[res].grade1+stu[res].grade2+stu[res].grade3)/3);
printf("------------------------------------------------------------\n");
}
}
void ScanfStu(){
printf("学号:");
scanf("%s",stu1[0].num);
printf("姓名:");
scanf("%s",stu1[0].name);
fflush(stdin);//清空键盘缓冲区,回车键enter被保留在键盘缓冲区,被第二个scanf接收,导致第二个scanf无法被输入。
printf("性别:");
scanf("%s",stu1[0].sex);
printf("英语成绩:");
scanf("%f",&stu1[0].grade1);
printf("计算机成绩:");
scanf("%f",&stu1[0].grade2);
printf("高数成绩:");
scanf("%f",&stu1[0].grade3);
}
void ModifyStu(){
ScanfStu();
int i;
int res=-1;
for(i=0;i<MAXSIZE;i++){
if(strcmp(stu[i].num,stu1[0].num)==0){
res=i;
break;
}
}
if(res==-1){
printf("没有此学生!");
}
else{
strcpy(stu[res].name,stu1[0].name);
strcpy(stu[res].sex,stu1[0].sex);
stu[res].grade1=stu1[0].grade1;
stu[res].grade2=stu1[0].grade2;
stu[res].grade3=stu1[0].grade3;
PrintStu();
}
}
void InsertStu(){
ScanfStu();
strcpy(stu[lenth].num,stu1[0].num);
strcpy(stu[lenth].name,stu1[0].name);
strcpy(stu[lenth].sex,stu1[0].sex);
stu[lenth].grade1=stu1[0].grade1;
stu[lenth].grade2=stu1[0].grade2;
stu[lenth].grade3=stu1[0].grade3;
PrintStu();
lenth++;
}
测试