天天看點

用C語言寫一個簡易的學生管理系統用c語言寫一個簡易的學生管理系統

用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;
}

           

繼續閱讀