学生信息管理系统C语言

这是一个使用C语言编写的简单学生信息管理系统,包括学生信息的录入、浏览、查询、添加、删除、修改和整表输出到文件等功能。系统通过结构体和文件操作实现,具有用户友好的交互界面,对输入数据进行合法性检查。源码展示了结构体的使用、文件操作及基本的链表操作。

用C写的简单的学生成绩管理系统(含源码)(适用于短学期作业)

1.需求分析

我们团队本次选择的问题是学生信息管理系统设计
问题描述:学生的基本个人信息管理,其中个人信息应包含:姓名、性别、年龄、出生年月、家庭住址、班级、电话号码、宿舍号等
实现功能:
1、具有整张信息表的浏览功能
2、整表输出到文件功能
3.个人信息的二次修改功能
4、新人员的基本信息的添加功能
5、删除实际人员基本信息功能
6、查询功能等
知 识 点:数组,指针、结构体、文件操作
说 明:必须用到结构体和文件操作

1.软件开发目的:
该学生信息管理系统软件主要是利用C语言的文件操作能力设计开发一个小型的学生信息管理系统,应具有如下功能:具有整张信息表的浏览功能、整表输出到文件功能、个人信息的二次修改功能、新人员的基本信息的添加功能、删除实际人员基本信息功能、查询功能等操作。操作界面要符合用户的一般习惯。

  1. 功能需求:
    (1)学生基本信息的录入和保存:这部分的功能主要包括从文件输入所有学生的各类信息并进行保存,在录入数据的同时,系统将对信息的合法性进行检验(学号位数不限、姓名为位数0-50、年龄不限岁、性别可输入男或女、生日位数0-50、地址位数0-50、电话位数0-50、寝室号位数0-50),若用户录入了不合法的数据系统将会作出提示,并且要求重新输入。选择存盘后,系统则自动将学生信息存入电脑。
    (2)浏览学生信息表:这部分的功能主要是对输入的所有学生的信息进行浏览,并且展示在窗口屏幕上;
    (3)查找学生信息:这部分功能主要是利用对学号的查找或者对名字的查找来筛选出相对应的学生的所有信息并且展示在窗口屏幕上;
    (4)增添学生信息:这个部分功能主要是手动添加若干学生以及相对应的信息,并且保存在电脑;
    (5)删除学生信息:这个部分功能主要是手动对若干学生的信息进行删除操作,从电脑保存的文件中删除;
    (6)修改学生信息:这个部分的主要功能是通过查找选定某个学生,然后对该学生的信息进行修改;
    (7)整表输出到文件:这个部分的主要功能是将存入的学生信息以表的形式输出到一个文件并保存;
    (8)退出系统:结束所有任务,关闭应用程序。
    3.使用说明:该可执行程序需要与数据文件放在一起才可打开,打开后需要先选择输入信息这一选项,系统会自动将数据文件里面的信息导入到该可执行程序,然后就可以执行浏览学生信息表、查找学生信息、增添学生信息、删除学生信息、修改学生信息、整表输出到文件等操作了,然后在每一个操作执行界面都会有一个返回主菜单的选项,用户可以选择该选项来回到主菜单界面,该学生信息管理系统应用程序使用简单,操作简易,非常符合现在系统的操作简便易懂的特点。

2.总体设计

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.详细设计

  1. 学生信息管理系统初始化设计
    void LoadStudentInFromFile()
    在这里插入图片描述
    2、删除学生信息操作设计
    void Delete();

在这里插入图片描述
3、修改学生信息操作设计
void Modify()
在这里插入图片描述
4、整表输出到文件(输出)操作设计
void ExportToFile()
在这里插入图片描述

4.调试与测试

1、初始化测试结果

在这里插入图片描述
2、删除学生信息测试结果
在这里插入图片描述
在这里插入图片描述
3、修改学生信息测试结果
> 引用文本在这里插入图片描述
4、输出学生信息测试结果
在这里插入图片描述
5.总结
拿到一个题目。进行题目分析,尽量分析出题目的领域。紧接着,尝试得到解题的算法。算法设计无论何时都是耗时且烧脑的。这一步先不要管太细节的边界问题。目的以得到一个大的解题思路为准。紧接着,编写程序。测试,边界测试,各种测试之后。考虑优化的问题。优化算法得出后,回归测试。
写代码时也要认真编写,不能遗漏一点细节,编写代码时要头脑清晰,知道每一行代码的目的以及接下来的应该做什么。不然只是按照自认为的随便写写,运行起来就会出很多小错误,回去debug的时候就非常麻烦,所以尽量做到第一次写就能成功运行。
如果实在有错误,也有一些小技巧可以找错,比如在代码中printf各个变量的实际值,就能知道程序实际是怎么运行的,如果变量不符合自己的要求,就在printf前端找错。这样相对简单一点

5.附源码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student
{
    int id;
    char name[50];
    char Class[50];
    char sex[50];
    char birthday[50];
    char address[50];
    char phone[50];
    char dormitory[50];
    struct student *next;
}student


student *head = NULL;
int length;
void LoadStudentInFromFile()
{
    student *p,*w;
    int c;
    FILE* f;
    f = fopen("input.txt","r");
    if(f == NULL)
    {
        return ;
    }
    fseek(f,0,SEEK_SET);
    p = (student *)malloc(sizeof(student));
    p->next = NULL;
    head = p;
    while(!feof(f))
    {
        c = fgetc(f);
        if(c != -1)
        {
            fseek(f,-1,SEEK_CUR);
        }
        else
        {
            return ;
        }
        w = (student *)malloc(sizeof(student));
        fscanf(f,"%d",&w->id);
        fscanf(f,"%s",&w->name);
        fscanf(f,"%s",&w->Class);
        fscanf(f,"%s",&w->sex);
        fscanf(f,"%s",&w->birthday);
        fscanf(f,"%s",&w->address);
        fscanf(f,"%s",&w->phone);
        fscanf(f,"%s",&w->dormitory);
        w->next = NULL;
        p->next = w;
        p = p->next;
        length ++;
    }
    system("cls");
	printf("学生信息录入完成\n"); 
    printf("返回请输入0\n");
	int n;
	scanf("%d",&n); 
	while(n!=0)
	scanf("%d",&n);
	system("cls"); 
}

void display()
{
    system("cls");
	student *p = head->next;
    printf("学生信息如下:\n");
    while(p != NULL)
    {
        printf("%d%s%s%s%s%s%s%s",p->id,p->name,p->Class,p->sex,p->birthday,p->address,p->phone,p->dormitory);
        printf("\n");
        p = p->next;
    }
    printf("若要返回请输入0\n");
	int n;
	scanf("%d",&n); 
	while(n=0)
	scanf("%d",&n);
	system("cls"); 
}
void Search()
{
    int num,x;
    char name[20];
    student *p = head->next;
    printf("请选择查询方式:\n");
    printf("1、按序号查询\t2、按姓名查询\n");
    scanf("%d",&x);
    if(x == 1)
    {
        printf("请输入学生序号:");
        scanf("%d",&num);
        while(p != NULL)
        {
            if(p->id == num)
            {
           	    system("cls");
				printf("序号为%d的学生信息如下:\n",num);
                printf("%d %s %s %s %s %s %s %s\n",p->id,p->name,p->Class,p->sex,p->birthday,p->address,p->phone,p->dormitory);
                break ;
            }
            p = p->next;
        }
        if(p == NULL)
        {
			system("cls");            
			printf("没有该学生的信息,查找失败!\n");
        }
    }
    else if(x == 2)
    {
        printf("请输入学生姓名:");
        getchar();
        gets(name);
        p = head->next;
        while(p != NULL)
        {
            if(strcmp(p->name,name) == 0)
            {
           	    system("cls");
				printf("学生姓名为%s的学生信息如下:\n",name);
                printf("%d %s %s %s %s %s %s %s \n",p->id,p->name,p->Class,p->sex,p->birthday,p->address,p->phone,p->dormitory);
                break;
            }
            p = p->next;
        }
        if(p == NULL)
            {
			system("cls");
			printf("没有该学生的信息,查找失败!!\n");
			}
    }
        printf("返回请输入0\n");
	int n;
	scanf("%d",&n); 
	while(n!=0)
	scanf("%d",&n);
	system("cls");
}



void Insert()
{
    int num,i;
    student *p,*q;
    p = head;

    printf("请输入要插入信息的位置:");
    scanf("%d",&num);
    if(num > length)
    {
        printf("该位置超出表格容量上限,无法插入\n");
    }
    else
    {
        printf("请输入要插入的学生的信息:序号 姓名 班级 性别 生日 地址 电话 宿舍号\n");
        q = (student *)malloc(sizeof(student));
        scanf("%d %s %s %s %s %s %s %s",&q->id,&q->name,&q->Class,&q->sex,&q->birthday,&q->address,&q->phone,&q->dormitory);
        while(p != NULL)
        {
            if((p->id == q->id)||(p->name == q->name)||(p->Class == q->Class)||(p->sex == q->sex)||(p->birthday == q->birthday)||(p->address == q->address)||(p->phone == q->phone)||(p->dormitory == q->dormitory))
            {
                printf("该学生信息已经存在或输入信息有误,无法插入!\n");
                break ;
            }
            p = p->next;
        }
        p = head;
        for(i=0; i<num; ++i)
        {
            p = p->next;
        }
        q->next = p->next;
        p->next = q;
        length ++;
       	system("cls");
		printf("插入成功!\n");
    }
        printf("返回请输入0\n");
	int n;
	scanf("%d",&n); 
	while(n!=0)
	scanf("%d",&n);
	system("cls");
}



void Delete()
{
    int num;
    student *p,*q;
    q = head;
    p = head->next;
    printf("请输入要删除的学生的序号:");
    scanf("%d",&num);

    while(p != NULL)
    {
        if(p->id == num)
        {
            q->next = p->next;
            free(p);
            length --;
           	system("cls");
			printf("删除成功!\n");
            break ;
        }
        p = p->next;
        q = q->next;
    }
    if(p == NULL)
    {
   	    system("cls"); 
		printf("该序号不存在!\n");
    }
        printf("返回请输入0\n");
	int n;
	scanf("%d",&n); 
	while(n!=0)
	scanf("%d",&n);
	system("cls"); 
}


void Modify()
{
    student *p = head->next;
    int num;
    printf("请输入要修改的学生的序号:");
    scanf("%d",&num);
    while(p != NULL)
    {
        if(p->id == num)
        {
            printf("修改前,序号为%d的学生信息如下:\n",num);
            printf("%d %s %s %s %s %s %s %s\n",p->id,p->name,p->Class,p->sex,p->birthday,p->address,p->phone,p->dormitory);
            printf("请输入学生的新电话:\n");
            getchar();
            gets(p->phone);
            printf("请输入学生的新地址:\n");
            gets(p->address);
            printf("请输入学生的新宿舍号:\n");
            gets(p->dormitory);
            printf("请输入学生的新班级:\n");
            gets(p->Class);
            system("cls");
            printf("信息修改完成\n");
			printf("修改后,学号为%d的学生信息如下:\n",num);
            printf("%d %s %s %s %s %s %s %s \n",p->id,p->name,p->Class,p->sex,p->birthday,p->address,p->phone,p->dormitory);
            break ;
        }
        p = p->next;
    }
    if(p == NULL)
    {
        printf("该序号不存在!\n");
        return ;
    }
        printf("返回请输入0\n");
	int n;
	scanf("%d",&n); 
	while(n!=0)
	scanf("%d",&n);
	system("cls"); 
}


void menu()
{
    printf("*---------------学生信息管理系统------------------*\n");
    printf("*-------------------------------------------------*\n");
    printf("*           1、学生信息的录入和保存               *\n");
    printf("*           2、浏览学生信息表                     *\n");
    printf("*           3、查找学生信息                       *\n");
    printf("*           4、增添学生信息                       *\n");
    printf("*           5、删除学生信息                       *\n");
    printf("*           6、修改学生信息                       *\n");
    printf("*           7、整表输出到文件                     *\n");
    printf("*           8、退出系统                           *\n");
    printf("*-------------------------------------------------*\n");
    return ;
}

void ExportToFile(){
   FILE * fp;
   student *p = head->next;
   fp = fopen("output.txt","w+");
   while(p != NULL){
   fprintf(fp,"%d %s %s %s %s %s %s %s\n",p->id,p->name,p->Class,p->sex,p->birthday,p->address,p->phone,p->dormitory);
   p = p->next;}
   fclose(fp);
   system("cls");
   printf("信息已输出为文件\n");
   printf("返回请输入0\n");
   int n;
	scanf("%d",&n); 
	while(n!=0)
	scanf("%d",&n);
	system("cls");
}
	
int main(void)
{
    int a;
    system("color F3");
    while(1)
    {	
        menu();			
		printf("请输入相应的功能:");
        scanf("%d",&a);

		switch(a)
        {
        case 1:
			LoadStudentInFromFile();
            break;
        case 2:
            if(head)
            {
                system("cls");
				display();
            }
            else
            {
                system("cls");
				printf("学生数据为空,请先录入数据!\n");
            }
            break;
        case 3:
            if(head)
            {
                Search();
            }
            else
            {
                system("cls");
				printf("学生数据为空,请先录入数据!\n");
            }
            break;
        case 4:
            if(head)
            {
                Insert();
            }
            else
            {
                system("cls");
				printf("学生数据为空,请先录入数据!\n");
            }
            break;
        case 5:
            if(head)
            {
                Delete();
            }
            else
            {
                system("cls");                
				printf("学生数据为空,请先录入数据!\n");
            }
            break;
        case 6:
            if(head)
            {
                Modify();
            }
            else
            {
                system("cls");
				printf("学生数据为空,请先录入数据!\n");
            }
            break;
        case 7:
		    if(head)
			{
				ExportToFile();
			}
			break; 
		case 8:
		    return 0;
        default:
            break;
        }
    }
    system("pause");
    return 0;
}


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值