使用结构体数组定义学生基本信息。 c语言编程的题。 三道题随便选一个就行
2个回答
展开全部
;第1个,大体上可以用了。
#include<stdio.h>
#include<string.h>
typedef struct {
char num[10];
char name[20];
int age;
int c;
int english;
int database;
int total;
} Student;
Student s[101]; //最多保存100名学生成绩
int len=3; //已经录入了多少名学生成绩
/**
*初始化3名学生数据,供测试使用
*
*/
void initScore() {
strcpy(s[0].num, "20180001");
strcpy(s[0].name, "张三");
s[0].age = 15;
s[0].c = 89;
s[0].english = 90;
s[0].database = 78;
strcpy(s[1].num, "20180003");
strcpy(s[1].name, "李四");
s[1].age = 16;
s[1].c = 93;
s[1].english = 89;
s[1].database = 88;
strcpy(s[2].num, "20180002");
strcpy(s[2].name, "王二");
s[2].age = 14;
s[2].c = 99;
s[2].english = 88;
s[2].database = 77;
}
/**
* 录入
*/
void Input() {
printf("输入学号:");scanf("%s", s[len].num);
printf("输入姓名:");scanf("%s", s[len].name);
printf("输入年龄:");scanf("%d", &s[len].age);
printf("输入C语言成绩 :");scanf("%d", &s[len].c);
printf("输入英语成绩 :");scanf("%d", &s[len].english);
printf("输入数据库成绩:");scanf("%d", &s[len].database);
s[len].total = s[len].c + s[len].english + s[len].database;
len++;
}
/**
* 拷贝s1内容到s0
*/
void copy(Student *s0, Student s1) {
strcpy(s0->num, s1.num);
strcpy(s0->name,s1.name);
s0->age = s1.age;
s0->c = s1.c;
s0->english = s1.english;
s0->database = s1.database;
s0->total = s1.total;
}
/**
* 查找
*/
int search(char *xh) {
char num[10];
int i, flag=0;
if (xh==NULL || strlen(xh)==0) {
printf("输入查询学号:");
scanf("%s", num);
flag = 1; //需要显示查询结果
} else {
strcpy(num, xh);
}
for (i=0;i<len;i++) {
if (strcmp(s[i].num, num)==0) {
if (flag) {
printf("学生信息:\n");
printf("\t学号:%s\n", s[i].num);
printf("\t姓名:%s\n", s[i].name);
printf("\t C语言成绩 :%d\n", s[i].c);
printf("\t 英语成绩 :%d\n", s[i].english);
printf("\t数据库成绩 :%d\n", s[i].database);
printf("\t 总成绩 :%d\n", s[i].total);
}
return i;
}
}
return -1;
}
/**
* 删除
*/
int deleteStudent() {
char num[10], yesno;
int i;
printf("输入要删除的学生学号:");
scanf("%s", num);
int p = search(num);
if (p==-1) {
printf("未找到该名学生\n");
return -1;
}
printf("学生信息:\n");
printf("\t学号:%s\n", s[p].num);
printf("\t姓名:%s\n", s[p].name);
printf("\t C语言成绩 :%d\n", s[p].c);
printf("\t 英语成绩 :%d\n", s[p].english);
printf("\t数据库成绩 :%d\n", s[p].database);
printf("确认要删除(Y/N)?");
fflush(stdin);
scanf("%c", &yesno);
if (yesno=='Y' || yesno=='y') {
len--;
for (i=p;i<len;i++) {
copy(&s[i],s[i+1]);
}
return 0; //删除
}
return 1; //不删除
}
/**
* 修改
*/
int change() {
char num[10];
printf("输入要修改的学生学号:");
scanf("%s", num);
int p = search(num);
if (p==-1) {
printf("未找到该名学生\n");
return -1;
}
printf("学生信息:\n");
printf("\t学号:%s\n", s[p].num);
printf("\t姓名:%s\n", s[p].name);
printf("\t C语言成绩 :%d\n", s[p].c);
printf("\t 英语成绩 :%d\n", s[p].english);
printf("\t数据库成绩 :%d\n", s[p].database);
printf("请修改学生信息:");
printf("输入姓名:");scanf("%s", s[p].name);
printf("输入年龄:");scanf("%d", &s[p].age);
printf("输入C语言成绩 :");scanf("%d", &s[p].c);
printf("输入英语成绩 :");scanf("%d", &s[p].english);
printf("输入数据库成绩:");scanf("%d", &s[p].database);
s[p].total = s[p].c + s[p].english + s[p].database;
return 0;
}
/**
* 计算总分
*/
void calcTotal() {
int i;
for (i=0;i<len;i++) {
s[i].total = s[i].c + s[i].english + s[i].database;
}
}
/**
* 按要求排序
* 简单起见,使用冒泡法排序
* n=1 按学号排序 (从小到大)
* n=2 按C语言成绩排序 (从大到小)
* n=3 按英文成绩排序 (从大到小)
* n=4 按数据库成绩排序 (从大到小)
* n=5 按总成绩排序 (从大到小)
*/
void sortbychoise() {
Student t;
int i, j, n;
printf("选择排序类型:\n");
printf("\t1.按学号排序\n");
printf("\t2.按C语言成绩排序\n");
printf("\t3.按英文成绩排序\n");
printf("\t4.按数据库成绩排序\n");
printf("\t5.按总成绩排序\n");
scanf("%d", &n);
for (i=0;i<len-1;i++) {
for (j=0;j<len-i-1;j++) {
switch (n) {
case 1:
if (strcmp(s[j].num, s[j+1].num)>0) {
copy(&t, s[j]);copy(&s[j], s[j+1]);copy(&s[j+1], t);
}
break;
case 2:
if (s[j].c<s[j+1].c) {
copy(&t, s[j]);copy(&s[j], s[j+1]);copy(&s[j+1], t);
}
break;
case 3:
if (s[j].english<s[j+1].english) {
copy(&t, s[j]);copy(&s[j], s[j+1]);copy(&s[j+1], t);
}
break;
case 4:
if (s[j].database<s[j+1].database) {
copy(&t, s[j]);copy(&s[j], s[j+1]);copy(&s[j+1], t);
}
break;
case 5:
if (s[j].total<s[j+1].total) {
copy(&t, s[j]);copy(&s[j], s[j+1]);copy(&s[j+1], t);
}
break;
}
}
}
}
/**
*显示所有学生信息
*/
void display() {
int i;
printf("----------------学生信息----------------\n");
printf(" 学号 姓名 年龄 C语言 英语 数据库 总成绩\n");
for (i=0;i<len;i++) {
printf("%10s %9s %5d %6d %6d %7d %7d\n",
s[i].num, s[i].name, s[i].age, s[i].c, s[i].english, s[i].database, s[i].total);
}
}
void showmenu() {
printf("----------------Menu----------------\n");
printf("1.录入学生信息\n");
printf("2.查询并显示学生信息\n");
printf("3.修改学生信息\n");
printf("4.删除学生信息\n");
printf("5.排序并显示\n");
printf("6.计算学生总成绩\n");
printf("7.显示所有学生信息\n");
printf("8.退出\n");
printf("------------------------------------\n");
}
int main() {
int select;
char q;
initScore(); //测试使用
do {
showmenu();
scanf("%d", &select);
if (select==1) {
Input();
} else if (select==2) {
search("");
} else if (select==3) {
change();
} else if (select==4) {
deleteStudent();
} else if (select==5) {
sortbychoise();
display();
} else if (select==6) {
calcTotal();
} else if (select==7) {
display();
} else if (select==8) {
q='q';
}
} while (q!='q');
return 0;
}
更多追问追答
追问
这么长的么,我去?
这么长的么,我去?
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询