这是一个简单的小项目练习,编写一个学生管理系统,里面有学生的学号、姓名、性别、考试成绩,以及用C语言实现这些数据的增删改查。
1.设计思路
首先创建三个文件,一个是我们的主函数main.c,然后实现功能的函数student.c,以及包含这些函数的头文件student.h。
在主函数中我们需要表明实现增加、查找、修改、删除、排序等功能,通过switch选择语句实现。这些函数在student.c中进行编写。在student.h函数中定义结构体变量,以及对所有函数进行声明。student.h文件如下。
#ifndef __STUDENT_H__
#define __STUDENT_H__
#define N 40
#include <stdio.h>
#include <string.h>
//学生信息的结构体
typedef struct __STUDENT{
int id;
char sex[16];
char name[32];
int score;
}stu_t;
//班级信息的结构体
typedef struct __CLASS{
stu_t person[N];//每个学生的信息
int count;//记录已有的人数
}class_t;
//函数的声明
void print_menu();
void insert_student(class_t *my_class);
void search_student(class_t *my_class);
void modify_student(class_t *my_class);
void delete_student(class_t *my_class);
void sort_student(class_t *my_class);
void print_student(class_t *my_class);
#endif
student.c的代码如下
#include "student.h"
//打印菜单的函数
void print_menu(){
printf("-------------------------------------------\n");
printf("| 1.添加 2.查找 3.修改 4.删除 5.排序 6.退出 |\n");
printf("-------------------------------------------\n");
printf("请输入你的选择:");
}
//添加学员信息的函数
void insert_student(class_t *my_class){
//判断人数是否已满
if(N==my_class->count){
printf("班级人数已经满了,添加失败!\n");
return;
}
printf("请输入新的学员的信息(学号 姓名 性别 成绩):\n");
scanf("%d%s%s%d",&my_class->person[my_class->count].id,
my_class->person[my_class->count].name,
my_class->person[my_class->count].sex,
&my_class->person[my_class->count].score);
my_class->count++;
printf("学员信息插入成功\n");
}
//查找学员信息的函数--根据id查找
void search_student(class_t *my_class){
int id =0;
int i=0;
printf("请输入你想查找的学号:");
scanf("%d",&id);
//遍历数组判断是否有这个人
for(i=0;i<my_class->count;i++){
if (id=my_class->person[i].id) break;
}
if (i<my_class->count)
{
printf("%-8d %-10s %-10s %-3d\n",my_class->person[i].id,
my_class->person[i].name,
my_class->person[i].sex,
my_class->person[i].score);
}
else if(i==my_class->count){
printf("查无此人!\n");
}
return;
}
//修改学员信息的函数--根据id修改name和score
void modify_student(class_t *my_class){
int id =0;
int i=0;
printf("请输入你修改的学号:");
scanf("%d",&id);
//遍历数组判断是否有这个人
for(i=0;i<my_class->count;i++){
if (id=my_class->person[i].id) break;
}
if (i<my_class->count)
{
printf("请输入你想要修改的信息(姓名 性别 成绩):");
scanf("%s%s%d",my_class->person[i].name,
my_class->person[i].sex,
&my_class->person[i].score);
printf("修改成功");
}
else if(i==my_class->count){
printf("查无此人!\n");
}
return;
}
//删除学员信息的函数--根据id删除
void delete_student(class_t *my_class){
int id =0;
int i=0;
int j=0;
printf("请输入你删除的学号:");
scanf("%d",&id);
//遍历数组判断是否有这个人
for(i=0;i<my_class->count;i++){
if (id=my_class->person[i].id) break;
}
if (i<my_class->count)
{
//执行删除的操作 把第i位后面的元素依次向前移动一步
for(j = i; j < my_class->count-1; j++){
my_class->person[j] = my_class->person[j+1];//结构体变量可以直接相互赋值
}
my_class->count--;
printf("学员信息删除成功..\n");
}
else if(i==my_class->count){
printf("查无此人!\n");
}
return;
}
//删除学员信息的函数--根据score降序排序
void sort_student(class_t *my_class){
int i=0;
int j=0;
stu_t temp;
for(i=0;i<my_class->count-1;i++){
for(j=0;j<my_class->count-1-i;j++){
if(my_class->person[j].score<my_class->person[j+1].score){
temp=my_class->person[j];
my_class->person[j]=my_class->person[j+1];
my_class->person[j+1]=temp;
}
}
}
printf("排序完成\n");
return;
}
//打印所有学员信息的函数--为了看现象用的
void print_student(class_t *my_class){
//需要遍历所有的学生信息
printf("\n");
for(int i=0;i<my_class->count;i++){
printf("%-8d %-10s %-10s %-3d\n",my_class->person[i].id,
my_class->person[i].name,
my_class->person[i].sex,
my_class->person[i].score);
}
printf("\n");
}
main.c的代码如下
#include "student.h"
int main(int argc, const char *argv[]){
printf("欢迎使用学生管理系统\n");
printf("本系统由李小蓝制作,用于学习交流\n");
class_t my_class;
my_class.count=0;
int choose=0;
while(1){
print_menu();
scanf("%d",&choose);
switch (choose){
case 1:
insert_student(&my_class);
break;
case 2:
search_student(&my_class);
break;
case 3:
modify_student(&my_class);
break;
case 4:
delete_student(&my_class);
break;
case 5:
sort_student(&my_class);
break;
}
if(6==choose) break;
printf("更新后的学生信息:\n");
print_student(&my_class);
}
printf("欢迎再次使用该系统!\n");
return 0;
}