用c語言寫一個簡易的學生管理系統
首先我們建立一個頭檔案student.h
在其中寫入兩個結構體,一個是學生的資訊,一個是班級的資訊,其次聲明你所需要的功能(此處我隻聲明了比較基本的幾個功能,可自行添加)
注:函數聲明時形參名稱可以不加,但是類型必須加
#ifndef __STUDENT_H__
#define __STUDENT_H__
#define MAX 40
typedef struct
{
int id;
char name[20];
int age;
float score;
}student_t;
typedef struct
{
int num;
student_t student[MAX];
}class_t;
enum{ ADD=1,DEL,SHOW,SEL,SORT,QUIT};
int add_student(class_t *cls);
int show_student(class_t *a);
int del_student(class_t *a);
int paixu(class_t *cls);
int sel(class_t *cls);
#endif
代碼片
然後你需要把你的功能進行實作
建立一個.c檔案,向其中寫入:
#include<stdio.h>
#include"student.h"
#include<string.h>
int add_student(class_t *cls)
{
int ret;
cls->num++;
if(cls->num>MAX)
{
cls->num--;
puts("...人數已滿,自動退出...");
return -1;
}
again:
puts("@@@請輸入:@@@");
puts("學号 姓名 年齡 分數\n");
ret=scanf("%d%s%d%f",&cls->student[cls->num].id,
cls->student[cls->num].name,
&cls->student[cls->num].age,
&cls->student[cls->num].score);
if(ret!=4)
{
puts("..輸入錯誤,請重新輸入..");
goto again;
}
puts("..添加成功..");
return 0;
}
int show_student(class_t *a)
{
int i;
printf("學生資訊如下:\n");
if(a->num==-1)
{
puts("...目前無學生資訊...");
return 0;
}
printf("學号 姓名 年齡 成績\n");
for(i=0;i<=a->num;i++)
{
printf("%d %s %d %.1f\n",a->student[i].id,
a->student[i].name,
a->student[i].age,
a->student[i].score);
}
return -1;
}
int del_student(class_t *a)
{
char b[20];
printf("輸入你所想删除人的姓名:\n");
scanf("%s",b);
while(getchar() !='\n');
int i,j=0,flag;
for(i=0;i<=a->num;i++)
{
flag=0;
if(strcmp(a->student[i].name,b)==0)//strcmp 如果相等,傳回0
{
a->student[j++] = a->student[i];
flag=1;
a->num--;
}
}
if(flag==0)puts("無此人");
else puts("删除完畢");
return 0;
}
void stu_swap(class_t *cls,int j);
int paixu(class_t *cls)
{
printf("未排序前預設為輸入時順序\n");
int i,j,flag;
for(i=0;i<=cls->num-1;i++)
{
flag=0;
for(j=0;j<=cls->num-i-1;j++)
{
if(cls->student[j].score<cls->student[j+1].score)
stu_swap(cls,j);
flag=1;
}
if(flag==0)
{
printf("排序完畢,自動傳回選擇界面\n");
break;
}
}
return 0;
}
int sel(class_t *cls)
{
puts("請輸入您想要查詢的學生姓名>");
char a[15]={0};
scanf("%s",a);
while(getchar() !='\n');
int i,flag=0;
for(i=0;i<=cls->num;i++)
{
if(strcmp(cls->student[i].name,a)==0)
{
printf("學号:%d 姓名:%s 年齡:%d 分數:%.1f",cls->student[i].id,
cls->student[i].name,
cls->student[i].age,
cls->student[i].score);
flag=1;
}
}
if(flag==0)puts("...查無此人...");
return 0;
}
void stu_swap(class_t *cls,int j)
{
student_t *new=NULL;
new=cls->student[j];
cls->student[j]=cls->student[j+1];
cls->student[j+1]=new;
}
功能函數寫完後,就要要寫主函數了
#include <stdio.h>
#include "student.h"
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int chose;
class_t *cls = NULL;
cls = (class_t *)malloc(sizeof(class_t));
if(cls == NULL)
{
printf("malloc error\n");
return -1;
}
// cls->n = 0;
cls->num = -1;
while(1)
{
puts("\n\n\n==========================================");
puts("==1.ADD 2.DEL 3.SHOW 4.SEL 5.SORT 6.QUIT==");
puts("==========================================");
printf("please input your chose>:\n");
scanf("%d",&chose);
getchar();
switch(chose)
{
case ADD:system("clear");
add_student(cls);
break;
case DEL:system("clear");
del_student(cls);
break;
case SHOW:system("clear");
show_student(cls);
break;
case SEL:system("clear");
sel(cls);
break;
case SORT:system("clear");
paixu(cls);
break;
case QUIT:system("clear");
goto OUT;
break;
default:system("clear");
printf("input error,try again\n");
continue;
}
}
OUT:
printf("quit system..\n");
if(cls != NULL)
{
free(cls);
cls = NULL;
}
return 0;
}