main.c
- 整体功能概述:
这是整个程序的入口点,实现了一个简单的学生信息管理系统的命令行交互界面。通过循环展示菜单,让用户选择不同的操作来管理学生信息,如录入、展示、添加、删除、修改、查找以及排序等操作,直到用户选择退出(输入 0 )为止。
#include<myhead.h>
#include"stu.h"
#include"stu_function.h"
#define STUMAX 100
int main(int argc, const char *argv[])
{
struct Studen stu[STUMAX];//班级成绩信息
int stu_sum=0;//总人数
int choise;
while(1){
mune();//菜单
puts("请输入你的选择");
scanf("%d",&choise);
switch(choise){
case 1:{
input_stu_info(stu,&stu_sum);
break;
}
case 2:{
output_stu_info(stu,stu_sum);
break;
}
case 3:{
add_stu_info(stu,&stu_sum);
break;
}
case 4:{
del_stu_info(stu,&stu_sum);
break;
}
case 5:{
updata_stu_info(stu,stu_sum);
break;
}
case 6:{
find_stu_info(stu,stu_sum);
break;
}
case 7:{
des_stu_info(stu,stu_sum);
break;
}
case 0:{
exit(0);
}
default:{
puts("重新输入");
break;
}
}
}
return 0;
}
stu.h
- 功能概述:
主要用于定义学生信息的数据结构,也就是 struct Studen 结构体,使得整个程序中涉及学生信息处理的各个模块(如 main.c、stu_function.c 等)都能知晓学生信息包含哪些具体的成员变量,便于进行数据的存储、传递和操作。
#ifndef STU_H
#define STU_H
struct Studen{
int id;
char name[20];
int score;
char sex[20];
char TEL[20];
};
#endif
stu_function.h
- 功能概述:
作为函数原型声明的头文件,起到了接口说明的作用。它向其他使用这些函数的源文件(如 main.c)声明了本程序中实现的各种学生信息管理操作函数的名称、参数类型以及返回值类型等信息,使得编译器能够在编译阶段对函数调用进行合法性检查,确保参数传递、返回值使用等符合预期,即使函数的具体实现代码在其他文件(stu_function.c)中也能正常编译调用。
#ifndef STU_FUNCTION_H
#define STU_FUNCTION_H
void mune();
void output_stu_info(struct Studen *stu,int n);
void input_stu_info(struct Studen *stu,int *n);
void add_stu_info(struct Studen *stu,int *n);
void del_stu_info(struct Studen *stu,int *n);
void updata_stu_info(struct Studen *stu,int n);
void find_stu_info(struct Studen *stu,int n);
void des_stu_info(struct Studen *stu,int n);
#endif
stu_function.c
- 功能概述:
这是实现各种学生信息管理具体操作函数的源文件,包含了与学生信息的录入、展示、添加、删除、修改、查找以及排序等相关功能对应的函数定义,这些函数与 stu_function.h 文件中声明的函数原型一一对应,实现了 main.c 文件中调用的各种具体操作逻辑。
#include<myhead.h>
#include"stu.h"
void mune(){
puts("菜单选项");
puts("1.信息录入");
puts("2.信息展示");
puts("3.添加一个学生操作");
puts("4.学生信息删除");
puts("5.更改其联系方式");
puts("6.查找学生信息");
puts("7.学生成绩降序排序");
puts("0.退出系统");
}
struct Studen* add_data(struct Studen *stu,int n,int m){
for(int i=n;i<m;i++){
printf("请输入第%02d个学生的学号:",i+1);
scanf("%d",&stu[i].id);
printf("请输入第%02d个学生的姓名:",i+1);
scanf("%s",stu[i].name);
printf("请输入第%02d个学生的成绩:",i+1);
scanf("%d",&stu[i].score);
printf("请输入第%02d个学生的性别:",i+1);
scanf("%s",stu[i].sex);
printf("请输入第%02d个学生的手机号:",i+1);
scanf("%s",stu[i].TEL);
puts("--------------------");
}
return stu;
}
void input_stu_info(struct Studen *stu,int *n){
puts("请输入添加人数");
int cout;
scanf("%d",&cout);
for(int i=*n;i<cout+*n;i++){
printf("请输入第%02d个学生的学号:",i+1);
scanf("%d",&stu[i].id);
printf("请输入第%02d个学生的姓名:",i+1);
scanf("%s",stu[i].name);
printf("请输入第%02d个学生的成绩:",i+1);
scanf("%d",&stu[i].score);
printf("请输入第%02d个学生的性别:",i+1);
scanf("%s",stu[i].sex);
printf("请输入第%02d个学生的手机号:",i+1);
scanf("%s",stu[i].TEL);
puts("--------------------");
}
*n=*n+cout;
puts("录入完成");
}
void output_stu_info(const struct Studen * stu,int n){
printf("学号\t姓名\t分数\t性别\t联系方式\n");
for(int i=0;i<n;i++){
printf("%d\t%s\t%d\t%s\t%s\n",\
stu[i].id,stu[i].name,stu[i].score,stu[i].sex,stu[i].TEL);
}
}
void add_stu_info(struct Studen *stu,int *n){
if(stu==NULL){
puts("请先录入");
return;
}
int cout=0;
printf("请输入添加的人数");
scanf("%d",&cout);
add_data(stu,*n,*n+cout);
*n=*n+cout;
puts("添加成功");
}
int find_id(struct Studen *stu,int id,int n ){
for(int i=0;i<n;i++){
if(stu[i].id==id){
return i;
}
}
return -1;
}
int del_data(struct Studen *stu,int flag,int n){
n--;
for(int i=flag;i<n;i++){
stu[i]=stu[i+1];
}
return 1;
}
void del_stu_info(struct Studen *stu,int *n){
if(stu==NULL){
puts("暂无数据");
}
puts("请输入你要删除的学号");
int id;
scanf("%d",&id);
int flag=find_id(stu,id,*n);
if(flag<0){
puts("无此学生");
return;
}else{
del_data(stu,flag,*n);
(*n)--;
}
puts("删除成功");
}
void updata_stu_info(struct Studen *stu,int n){
puts("请输入你要修改的id");
int id;
scanf("%d",&id);
int flag=find_id(stu,id,n);
if(flag<0){
puts("无次学生");
}else{
puts("请输入你要修改的联系方式");
scanf("%s",stu[flag].TEL);
}
puts("修改成功");
}
void find_stu_info(struct Studen *stu,int n){
puts("请输入你要查找的id");
int id;
scanf("%d",&id);
int i=find_id(stu,id,n);
if(i<0){
puts("无此学士");
return ;
}
printf("学号\t姓名\t分数\t性别\t联系方式\n");
printf("%d\t%s\t%d\t%s\t%s\n",\
stu[i].id,stu[i].name,stu[i].score,stu[i].sex,stu[i].TEL);
}
void des_stu_info(struct Studen *stu,int n){
for(int i=1;i<n;i++){
for(int j=0;j<n-i;j++){
if(stu[j].score<stu[j+1].score){
struct Studen temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}
printf("ok\n");
}