大一弱弱的C语言结业设计—学生信息管理系统

弱弱的第一篇博客,大一上C语言结业设计—学生信息管理系统

运行界面先放出来

运
在这里插入图片描述

首先是头文件部分

#include <stdio.h>
#include <windows.h>
#include <string.h>

然后呢,是定义的两个全局变量

struct student
{
char name[9];
char num[20];
char sex[5];
char age[5];
char brithday[20];
char native_place[50];
char department[50];
char major[50];
char rewards_punished[50];
};
typedef struct student STUDENT;


STUDENT stu[100];
int total_student;

然后就是主函数啦,哈哈哈,短小精悍

int main()
{
    Init();
    MainMenu();
    return 0;
}

然后呢就是函数部分

首先是加载界面
//打印加载界面,花里胡哨的sleep函数可以延迟
void Init()
{
	int i;
	char heihei[] = { "L o a d i n g ..." };
	system("color 9");
	printf("\n\t ");
	printf("\t\t\t\tWelcome to use this system !\n");
	printf("\n\t ");
	printf("\t\t\t\t");
	for (i = 0; i < strlen(heihei); i++)
	{
		printf("%c", heihei[i]);
		Sleep(100);
	}
	printf("\n");
}
然后是主菜单部分

打印主菜单

void PrintMenu()
{
    int i;
    printf("\n\t ");
    for (i = 0; i < 50; i++)
	{
		printf("* ");
		Sleep(10);
	}
    printf("\n");
    printf("\t\t\t\t\t0.Exit\n");
    printf("\t\t\t\t\t1.ScanfStdudent Information\n");
    printf("\t\t\t\t\t2.PrintStudent Information\n");
    printf("\t\t\t\t\t3.SortStudent Information\n");
    printf("\t\t\t\t\t4.AddStudent Information\n");
    printf("\t\t\t\t\t5.DeleteStudent Information\n");
    printf("\t\t\t\t\t6.ModifyStudent Information\n");
    printf("\t\t\t\t\t7.Search For student\n");
    printf("\t\t\t\t\t8.WriteToFile\n");
    printf("\n\t ");
    for (i = 0; i < 50; i++)
	{
		printf("* ");
		Sleep(10);
	}
	printf("\n");
}

主菜单函数

void MainMenu()
{
    int flag;
    PrintMenu();
    do{
        printf("\n\t ");
        printf("\t\t\t\tPlease input your choose:(0 ~ 8):");
        scanf("%d",&flag);
    }while(flag < 0 || flag > 8);
    fflush(stdin);
    switch(flag)
    {
    case 0:
        flag = 0;
        break;
    case 1:
        total_student = ScanfInformation(stu);
        Quit();
        break;
    case 2:
        system("cls");
        PrintInformation(stu);
        Quit();
        break;
    case 3:
        system("cls");
        SortStudent();
        Quit();
        break;
    case 4:
        system("cls");
        AddInformation();
        Quit();
        break;
    case 5:
        system("cls");
        DeleteInformation();
        Quit();
        break;
    case 6:
        system("cls");
        ModifyInformation();
        Quit();
        break;
    case 7:
        system("cls");
        SubMenu();
        Quit();
        break;
    case 8:
        system("cls");
        WriteToFile();
        Quit();
        break;
    default:
        printf("\t\t\t\tInvalid operator!\n");
    }

}
接下来就是输入输出数据啦

为什么已经是全局变量还要用指针呢?不用不就是白学了

int ScanfInformation(STUDENT *p)
{
        int num=0;
        do{

        printf("Please input student's name:\n");
        scanf("%s",p->name);
        printf("Please input student's num:\n");
        scanf("%s",p->num);
        printf("Please input student's sex:\n");
        scanf("%s",p->sex);
        printf("Please input student's age:\n");
        scanf("%s",p->age);
        printf("Please input student's brithday:\n");
        scanf("%s",p->brithday);
        printf("Please input student's native_place:\n");
        scanf("%s",p->native_place);
        printf("Please input student's department:\n");
        scanf("%s",p->department);
        printf("Please input student's major:\n");
        scanf("%s",p->major);
        printf("Please input student's rewards_punished:\n");
        scanf("%s",p->rewards_punished);
        fflush(stdin);
        p++;
        num++;
        printf("\t\t\t\t\tHave inputed %d student's information.\n",num);
        }while(Choose());
    return num;

}

判断是否继续输入

int Choose()
{
    char choose;
    do{
        printf("\t\t\t\t\tContinue ? Please choose (Y/y or N/n):\n");
        scanf("%c",&choose);
        fflush(stdin);
    }while(choose != 'Y' || choose != 'y' || choose != 'N' || choose != 'n');
    system("cls");
    if(choose == 'Y' || choose == 'y')
        return 1;
    else
        return 0;
}

输出函数

void PrintInformation(STUDENT *p)
{
        int i;
        printf("This is the information of student:\n");
        for (i = 0; i < 120; i++)
        {
		printf("*");
		Sleep(10);
        }
        printf("\n");
        for(i = 0; i < total_student; i++,p++)
        {
            printf("%-2s %-2s %-2s %-2s %-2s %-2s %-2s %-2s %-2s\n",
                        p->name,
                        p->num,
                        p->sex,
                        p->age,
                        p->brithday,
                        p->native_place,
                        p->department,
                        p->major,
                        p->rewards_punished);
        }
}
Quit函数用判断是否返回主菜单

按Esc退出

void Quit()
{
	char ch;
	int i;
	printf("\n\t ");
	for (i = 0; i < 50; i++)
	{
		printf("* ");
		Sleep(10);
	}
	printf("\n\n\t\t\t\t\tPress any key to return Mainmenu\n\n\t\t\t\t\tExit please press Esc\n");
	scanf("%c",&ch);
	fflush(stdin);
	if (ch == 0x1b)
	{
		_exit(0);
	}
	MainMenu();
}
排序函数

功能都是建立在排序的基础上哦
我用的是选择排序法,因为插入排序忘了。快排马马虎虎。为什么不直接排呢?行数不够

void SortStudent()
{
    int i,j;
    for(i = 1;i < total_student;i++)
    {
        j = i - 1;
        stu[total_student] = stu[i];
        while(j >= 0 && strcmp(stu[total_student].num,stu[j].num) < 0)
        {
            Swap2(j+1,j);
            j--;
        }
        stu[j+1] = stu[total_student];
    }
    printf("\t\t\t\t\tStudent Information have sorted!\n");
}

交换结构体的函数`

void Swap2(int i,int k)
{
    Swap1(stu[i].name,stu[k].name);
    Swap1(stu[i].num,stu[k].num);
    Swap1(stu[i].sex,stu[k].sex);
    Swap1(stu[i].age,stu[k].age);
    Swap1(stu[i].brithday,stu[k].brithday);
    Swap1(stu[i].native_place,stu[k].native_place);
    Swap1(stu[i].department,stu[k].department);
    Swap1(stu[i].major,stu[k].major);
    Swap1(stu[i].rewards_punished,stu[k].rewards_punished);
}

交换两个字符串的函数

void Swap1(char a[],char b[])
{
    char temp[100];
    strcpy(temp,a);
    strcpy(a,b);
    strcpy(b,temp);

}
接下来是添加学生信息

思想:在结构体数组末尾输入要添加的学生信息,比较学号大小,找到要插入的位置,再把总的学生人数加1.

void AddInformation()
{
    int i;
    printf("Please input student's name:\n");
    scanf("%s",stu[total_student].name);
    printf("Please input student's num:\n");
    scanf("%s",stu[total_student].num);
    printf("Please input student's sex:\n");
    scanf("%s",stu[total_student].sex);
    printf("Please input student's age:\n");
    scanf("%s",stu[total_student].age);
    printf("Please input student's brithday:\n");
    scanf("%s",stu[total_student].brithday);
    printf("Please input student's native_place:\n");
    scanf("%s",stu[total_student].native_place);
    printf("Please input student's department:\n");
    scanf("%s",stu[total_student].department);
    printf("Please input student's major:\n");
    scanf("%s",stu[total_student].major);
    printf("Please input student's rewards_punished:\n");
    scanf("%s",stu[total_student].rewards_punished);
    fflush(stdin);
    for(i = 0;i < total_student;i++)
    {
        if(strcmp(stu[i].num,stu[total_student].num) > 0)
            Swap2(i,total_student);
    }
    total_student++;
}
删除学生信息

思想:根据输入的学号找到学生,然后用自己定义的Swap2函数,循环把这个学生交换到末尾,然后总的学生-1,不输出他,哈哈哈哈哈哈假装删除了。。没得事,下次输入数据覆盖了就好了,哈哈哈

void AddInformation()
{
    int i;
    printf("Please input student's name:\n");
    scanf("%s",stu[total_student].name);
    printf("Please input student's num:\n");
    scanf("%s",stu[total_student].num);
    printf("Please input student's sex:\n");
    scanf("%s",stu[total_student].sex);
    printf("Please input student's age:\n");
    scanf("%s",stu[total_student].age);
    printf("Please input student's brithday:\n");
    scanf("%s",stu[total_student].brithday);
    printf("Please input student's native_place:\n");
    scanf("%s",stu[total_student].native_place);
    printf("Please input student's department:\n");
    scanf("%s",stu[total_student].department);
    printf("Please input student's major:\n");
    scanf("%s",stu[total_student].major);
    printf("Please input student's rewards_punished:\n");
    scanf("%s",stu[total_student].rewards_punished);
    fflush(stdin);
    for(i = 0;i < total_student;i++)
    {
        if(strcmp(stu[i].num,stu[total_student].num) > 0)
            Swap2(i,total_student);
    }
    total_student++;
}
修改学生信息

这个很简单啦,就是根据学号找到学生,在重新输入一次就好了

void ModifyInformation()
{
    int i;
    printf("Please input the num that you want to modify:\n");
    scanf("%s",stu[total_student].num);
    for(i = 0;i < total_student;i++)
    {
        if(strcmp(stu[i].num,stu[total_student].num)==0)
        {
            printf("Have find!\n");
            printf("Please input student's name:\n");
            scanf("%s",stu[total_student].name);
            printf("Please input student's sex:\n");
            scanf("%s",stu[total_student].sex);
            printf("Please input student's age:\n");
            scanf("%s",stu[total_student].age);
            printf("Please input student's brithday:\n");
            scanf("%s",stu[total_student].brithday);
            printf("Please input student's native_place:\n");
            scanf("%s",stu[total_student].native_place);
            printf("Please input student's department:\n");
            scanf("%s",stu[total_student].department);
            printf("Please input student's major:\n");
            scanf("%s",stu[total_student].major);
            printf("Please input student's rewards_punished:\n");
            scanf("%s",stu[total_student].rewards_punished);
            fflush(stdin);
            Swap2(i,total_student);
            printf("This student's information have modified!\n");
        }
    }
}
然后就是查找函数部分啦
这里有一个子菜单

用来输入查找的姓名或者学号。

void SubMenu()
{
    PrintSubMenu();
    int flag;
    char target[20];
    do{
        printf("\n\t ");
        printf("\t\t\t\t\tPlease input your choose:(1 ~ 2):");
        scanf("%d",&flag);
    }while(flag < 1 || flag > 2);
    fflush(stdin);
    switch(flag)
    {
    case 1:
        system("cls");
        printf("Please input student's name:\n");
        scanf("%s",target);
        fflush(stdin);
        Search(target);
        Back();
        break;
    case 2:
        system("cls");
        printf("Please input student's num:\n");
        scanf("%s",target);
        fflush(stdin);
        Search(target);
        Back();
        break;
    default:
        printf("Invalid operator!\n");
    }
}

其实只有一个查找函数,哈哈哈哈哈哈哈哈哈没想到把,二分法查找要把学号改成longlong,而且还要再写一个查找名字的函数,行数已经够了,这样更省事嘛。嘻嘻,用的也是指针,不用白不用嘛,学了就要用。

打印子菜单
void PrintSubMenu()
{
   int i;
    printf("\n\t ");
    for (i = 0; i < 50; i++)
	{
		printf("* ");
		Sleep(10);
	}
    printf("\n");
    printf("\t\t\t\t\t\t1.Search By Name\n");
    printf("\t\t\t\t\t\t2.Search By num\n");
    printf("\n\t ");
    for (i = 0; i < 50; i++)
	{
		printf("* ");
		Sleep(10);
	}
	printf("\n");
}
子菜单的返回函数
void Back()
{
	char choose;
	int i;
	printf("\n\t ");
	for (i = 0; i < 50; i++)
	{
		printf("* ");
		Sleep(10);
	}
	do{
        printf("\n\n\t\t\t\tDo you want re-query?(Y/y or N/n):\n");
        scanf("%c",&choose);
        fflush(stdin);
	}while(choose != 'Y' || choose != 'y' || choose != 'N' || choose != 'n');
	if (choose == 'Y' || choose == 'y')
	{
		SubMenu();
	}
	else
        MainMenu();
}
查找函数

思想:输入学生的姓名,或者学号,查找符合条件的所有学生

void Search(char a[])
{
    int flag = 0,sum = 0;
    int i;
    STUDENT *p = stu;
    for(i = 0;i < total_student;i++,p++)
    {
        if(strcmp(p->name,a)==0 || strcmp(p->num,a)==0)
            {
                printf("%-2s %-2s %-2s %-2s %-2s %-2s %-2s %-2s %-2s\n",
                            p->name,
                            p->num,
                            p->sex,
                            p->age,
                            p->brithday,
                            p->native_place,
                            p->department,
                            p->major,
                            p->rewards_punished);
                printf("\n");
                flag = 1;
                sum ++;
            }

    }
    if(flag == 0)
        printf("Not Find!");
    else
        printf("Find %d student!\n",sum);
}
最后一个保存数据函数

就是循环写入txt文件啦

void WriteToFile()
{
    FILE *fp;
    int i;
    if((fp = fopen("StudentInformation_system.txt","w")) == NULL)
    {
        printf("\t\t\t\t\tFail to open score.txt!\n");
    }
    else
    {

        fprintf(fp,"Total students is : %d",total_student);
        fprintf(fp,"\n\n");
        for(i = 0;i<total_student;i++)
        {

            fprintf(fp,"%-2s\t\t %-2s\t\t %-2s\t\t %-2s\t\t %-2s\t\t %-2s\t\t %-2s\t\t %-2s\t\t %-2s\t\t",
                    stu[i].name,
                    stu[i].num,
                    stu[i].sex,
                    stu[i].age,
                    stu[i].brithday,
                    stu[i].native_place,
                    stu[i].department,
                    stu[i].major,
                    stu[i].rewards_punished);
            fprintf(fp,"\n");
        }
        fclose(fp);
        printf("\t\t\t\t\tThe student's information have been saved!\n");
    }
}

做的蛮水的,大佬轻喷

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值