11.26作业
#include "test.h"
#include <myhead.h>
int main(int argc, const char *argv[])
{
Student students[100]; // 假设最多有100个学生
int select = 0;
int n = 0; // 学生数量
menu();
while (1)
{
printf("请输入你想要的功能:");
scanf("%d", &select);
getchar(); // 吸收换行符
switch (select)
{
case 1:
input(students, n);
break;
case 2:
output(students, n);
break;
case 3:
add(students, &n);
break;
case 4:
delate(students, n);
break;
case 5:
change_TEOL(students, n);
break;
case 6:
show(students, n);
break;
case 7:
compare(students, n);
break;
case 0:
exit(0);
default:
printf("您输入的功能有误,请重新输入\n");
}
}
return 0;
}
#include "test.h"
#include <myhead.h>
int main(int argc, const char *argv[])
{
Student students[100]; // 假设最多有100个学生
int select = 0;
int n = 0; // 学生数量
menu();
while (1)
{
printf("请输入你想要的功能:");
scanf("%d", &select);
getchar(); // 吸收换行符
switch (select)
{
case 1:
input(students, n);
break;
case 2:
output(students, n);
break;
case 3:
add(students, &n);
break;
case 4:
delate(students, n);
break;
case 5:
change_TEOL(students, n);
break;
case 6:
show(students, n);
break;
case 7:
compare(students, n);
break;
case 0:
exit(0);
default:
printf("您输入的功能有误,请重新输入\n");
}
}
return 0;
}
ubuntu@ubuntu:day19$ cat test.c
#include "test.h"
#include <myhead.h>
void menu()
{
printf("学生管理系统功能如下:\n");
printf("功能1:信息录入\n");
printf("功能2:信息展示\n");
printf("功能3:添加一个学生\n");
printf("功能4:输入一个学号,删除该学号对应的学生信息\n");
printf("功能5:输入一个学生姓名,更改其联系方式\n");
printf("功能6:输入一个学生姓名,展示该学生的所有信息\n");
printf("功能7: 将学生按成绩进行降序排序\n");
printf("功能0:退出系统\n");
}
void input(Student *ptr, int n)
{
printf("请输入学生的信息\n");
for (int i = 0; i < n; i++)
{
printf("请输入第%d个学生的学号\n", i + 1);
scanf("%d", &ptr[i].num);
scanf("%*c"); // 吸收换行符
printf("请输入第%d个学生的姓名\n", i + 1);
scanf("%19s", ptr[i].name); // 限制输入长度
printf("请输入第%d个学生的成绩\n", i + 1);
scanf("%lf", &ptr[i].score);
printf("请输入第%d个学生的性别\n", i + 1);
scanf(" %c", &ptr[i].sex); // 吸收前一个字符的换行符
printf("请输入第%d个学生的电话\n", i + 1);
scanf("%10s", ptr[i].TEOL); // 限制输入长度
}
printf("录入成功\n");
}
void output(const Student *ptr, int n)
{
printf("学生信息如下:\n");
for (int i = 0; i < n; i++)
{
printf("%d\t%s\t%lf\t%c\t%s\n", ptr[i].num, ptr[i].name, ptr[i].score, ptr[i].sex, ptr[i].TEOL);
}
}
void add(Student *ptr, int *n)
{
if (*n >= 100)
{ // 假设最大100个学生
printf("学生数量已达上限\n");
return;
}
printf("请输入新学生的学号\n");
scanf("%d", &ptr[*n].num);
scanf("%*c"); // 吸收换行符
printf("请输入新学生的姓名\n");
scanf("%19s", ptr[*n].name); // 限制输入长度
printf("请输入新学生的成绩\n");
scanf("%lf", &ptr[*n].score);
printf("请输入新学生的性别\n");
scanf(" %c", &ptr[*n].sex); // 吸收前一个字符的换行符
printf("请输入新学生的电话\n");
scanf("%10s", ptr[*n].TEOL); // 限制输入长度
(*n)++;
printf("录入成功\n");
}
void delate(Student *ptr, int n)
{
int m;
printf("请输入想要删除信息的学生学号\n");
scanf("%d", &m);
for (int i = 0; i < n; i++)
{
if (ptr[i].num == m)
{
for (int j = i; j < n - 1; j++)
{
ptr[j] = ptr[j + 1];
}
n--;
printf("删除完成\n");
return;
}
}
printf("未找到学号为%d的学生\n", m);
}
void change_TEOL(Student *ptr, int n)
{
char a[20];
printf("请输入想要修改联系方式学生的姓名: ");
scanf("%19s", a); // 限制输入长度
for (int i = 0; i < n; i++) {
if (strcmp(ptr[i].name, a) == 0)
{
printf("联系方式修改为:");
scanf("%10s", ptr[i].TEOL); // 限制输入长度
printf("修改完成\n");
return;
}
}
printf("未找到姓名为%s的学生\n", a);
}
void show(Student *ptr, int n)
{
char a[20];
printf("请输入想要展示信息学生的姓名: ");
scanf("%19s", a); // 限制输入长度
for (int i = 0; i < n; i++) {
if (strcmp(ptr[i].name, a) == 0)
{
printf("学生信息为:%d\t%s\t%lf\t%c\t%s\n", ptr[i].num, ptr[i].name, ptr[i].score, ptr[i].sex, ptr[i].TEOL);
return;
}
}
printf("未找到姓名为%s的学生\n", a);
}
void compare(Student *ptr, int n)
{
printf("学生成绩降序排序的顺序为:\n");
for (int j = 1; j < n; j++)
{
for (int i = 0; i < n - j; i++)
{
if (ptr[i].score < ptr[i + 1].score) {
Student temp = ptr[i];
ptr[i] = ptr[i + 1];
ptr[i + 1] = temp;
}
}
}
output(ptr, n); // 显示排序后的结果
}
#ifndef TEST_H
#define TEST_H
typedef struct Student
{
int num;
char name[20];
double score;
char sex;
char TEOL[11];
} Student;
void menu(void);
void input(Student *ptr, int n);
void output(const Student *ptr, int n);
void add(Student *ptr, int *n);
void delate(Student *ptr, int n);
void change_TEOL(Student *ptr, int n);
void show(Student *ptr, int n);
void compare(Student *ptr, int n);
#endif
C语言特性
├── 结构体
│ ├── 引入
│ │ └── 用于定义新的数据类型,如学生、工人等
│ ├── 定义
│ │ ├── 关键字 struct
│ │ ├── 结构体名
│ │ ├── 成员列表:类型和变量名
│ │ └── 结尾分号
│ ├── 注意事项
│ │ ├── struct 不能省略
│ │ ├── 结构体名类似于 int、float
│ │ ├── 成员用花括号包裹
│ │ ├── 成员类型任意
│ │ └── 结尾分号不能省略
│ ├── 定义变量和初始化
│ │ ├── 三种方式定义变量
│ │ ├── 三种方式初始化
│ │ └── 部分成员初始化
│ ├── 成员访问
│ │ ├── 点运算符(.)
│ │ └── 箭头运算符(->)
│ └── 结构体数组
│ └── 访问数组元素的成员
├── 特殊关键字
│ ├── const
│ │ ├── 常属性
│ │ ├── 修饰普通变量
│ │ ├── 修饰指针变量
│ │ │ ├── const int *ptr
│ │ │ ├── int const *ptr
│ │ │ ├── int * const ptr
│ │ │ └── const int * const ptr
│ │ └── 修饰函数参数和返回值
│ ├── static
│ │ ├── 修饰局部变量
│ │ ├── 修饰全局变量
│ │ └── 修饰函数
│ └── extern
│ └── 引入其他文件的全局变量
└── 例子和练习
├── 结构体大小
├── 英雄信息排序
└── const 和 static 示例