学生信息管理系统

前几天翻WPS的时候,发现了之前C语言程序设计的作业记录,就想着发出来给大家看看,万一用的上也可以用用,

《程序设计基础》课程设计报告

一、设计要求

1、题目分析

    要求我们做一个学生信息的管理系统,要有展示增加、删除、修改、查询几个基本功能,既然是信息管理系统那么肯定需要结构体,还需要往里面加一个学生信息的文件,以便于存储和读取,看功能还要有循环类的代码结构。

  1. 需求分析

能够展示增加、删除、修改、查询学生信息,实现自动化管理。

二、概要设计

1、主界面设计

2、存储结构设计

建立一个txt文件和学生信息结构体以便存储学生信息

 

 

3、系统功能设计

查询学生信息

增加学生信息

删除学生信息

修改学生信息

输出学生信息

读取学生信息

三、功能模块设计

1、模块设计

头函数模块、结构体模块、主函数模块、函数声明模块

头函数模块

 

结构体模块

 

主函数模块

 

函数声明模块

 

2、系统子程序级功能设计

 

3、功能函数调用关系

 四、详细设计

1、数据类型定义

定义了int整型和char字符型数据,还有指针域

 

定义链表

 

读取和保存文件

 

2、系统主要子程序详细设计

  1. 主函数界面

int main()

{

ReadFile(&List);

int choice = 0;

while(true){

welcome();

scanf("%d",&choice);

switch(choice){

case 1:    //增加学生信息

printAddStuInfo();

break;

case 2:    //删除学生信息

printDelStuInfo(&List);

break;

case 3:    //修改学生信息

printFixStuInfo(&List);

break;

case 4:    //查询学生信息

printFindStuInfo(&List);

break;

case 5:    //输出学生信息

printStuInfo(&List);

break;

case 0:    //退出管理系统

exitSys();

break;

}

printf("是否继续操作?(yes:1/no:0)\n");

scanf("%d",&choice);

if(choice == 0){

break;

}

}

exitSys();

return 0;

}

  1. 显示页面

void welcome()

{

printf("*******************************\n");

printf("********学生信息管理系统*******\n");

printf("**      增加学生信息----1    **\n");

printf("**      删除学生信息----2    **\n");

printf("**      修改学生信息----3    **\n");

printf("**      查询学生信息----4    **\n");

printf("**      输出学生信息----5    **\n");

printf("**      退出管理系统----0    **\n");

printf("*******************************\n");

printf("请输入对应的功能键(数字):\n");

}

  1. 增加学生信息

void printAddStuInfo(){

node st;

printf("请输入新增学生的相关信息:\n");

printf("学号:");

scanf("%d",&st.id);

printf("姓名:");

scanf("%s",&st.name);

printf("性别:");

scanf("%s",&st.gender);

printf("语文:");

scanf("%d",&st.Chinese);

printf("数学:");

scanf("%d",&st.math);

printf("英语:");

scanf("%d",&st.English);

st.sum = st.Chinese+st.math+st.English;

InsertStudentInfo(&List,st);

}

void InsertStudentInfo(node *L,node e){

node *h = L;

node *s = (node *)malloc(sizeof(node));

*s = e;

s->next = h->next;

h->next = s;

saveFile(L);

}

  1. 删除学生信息

void printDelStuInfo(node *L){

int id,choice;

printf("请输入要删除学生的学号信息\n");

scanf("%d",&id);

node *pre = findPreStuById(id,L);

node *st = pre->next;

if(st == NULL){

printf("不存在学号为%d的学生信息\n",id);

return;

}

printf(" ----------------------------------------------------\n");

printf("|学号\t|姓名\t|性别\t|语文\t|数学\t|英语\t|总分|\n");

printf(" ----------------------------------------------------\n");

printf("|%d|%s\t|%s\t|%d\t|%d\t|%d\t|%d |\n",st->id,st->name,st->gender,st->Chinese,st->math,st->English,st->sum);

printf(" ----------------------------------------------------\n");

printf("是否删除该学生信息(yes:1/no:0)\n");

scanf("%d",&choice);

if(choice == 0){

return;

}else if(choice == 1){

pre->next = st->next;

st->next = NULL;

free(st);

saveFile(L);

}else{

printf("不存在该选项,请输入0/1");

}

}

  1. 修改学生信息

void printFixStuInfo(node *L){

int id,choice = 0;

printf("请输入要修改的学生的学号信息\n");

scanf("%d",&id);

node *st = findStuById(id,L);

if(st == NULL){

printf("不存在学号为%d的学生信息\n",id);

}

while(1){

printf("修改姓名       --------1\n");

printf("修改性别       --------2\n");

printf("修改语文成绩   --------3\n");

printf("修改数学成绩   --------4\n");

printf("修改英语成绩   --------5\n");

printf("请输入要修改的内容:");

scanf("%d",&choice);

switch(choice){

case 1:

printf("请输入修改后的姓名:");

scanf("%s",st->name);

break;

case 2:

printf("请输入修改后的性别:");

scanf("%s",st->gender);

break;

case 3:

printf("请输入修改后的语文成绩:");

scanf("%d",&st->Chinese);

break;

case 4:

printf("请输入修改后的数学成绩:");

scanf("%d",&st->math);

break;

case 5:

printf("请输入修改后的英语成绩:");

scanf("%d",&st->English);

break;

}

printf("是否继续修改该学生信息(yes:1/no:0)");

scanf("%d",&choice);

if(choice == 0){

st->sum = st->Chinese + st->math + st->English;

printf("修改后的学生成绩如下:\n");

printf(" ----------------------------------------------------\n");

printf("|学号\t|姓名\t|性别\t|语文\t|数学\t|英语\t|总分|\n");

printf(" ----------------------------------------------------\n");

printf("|%d|%s\t|%s\t|%d\t|%d\t|%d\t|%d |\n",st->id,st->name,st->gender,st->Chinese,st->math,st->English,st->sum);

printf(" ----------------------------------------------------\n");

break;

}

saveFile(L);

}

}

  1. 查询学生信息

void printFindStuInfo(node *L){

int choice = 0,id;

node *p;

char name[50];

printf("请输入查询方式(学号:1/姓名:0)\n");

scanf("%d",&choice);

if(choice == 1){

printf("请输入查询学生的学号:\n");

scanf("%d",&id);

p = findStuById(id, L);

if(p == NULL){

printf("不存在学号为%d的学生的学生信息\n",id);

}else{

printf(" ----------------------------------------------------\n");

printf("|学号\t|姓名\t|性别\t|语文\t|数学\t|英语\t|总分|\n");

printf(" ----------------------------------------------------\n");

printf("|%d|%s\t|%s\t|%d\t|%d\t|%d\t|%d |\n",p->id,p->name,p->gender,p->Chinese,p->math,p->English,p->sum);

printf(" ----------------------------------------------------\n");

}

}else if(choice == 0){

printf("请输入查询学生的姓名:\n");

scanf("%s",&name);

p = findStuByName(name, L);

if(p == NULL){

printf("不存在姓名为%s的学生的学生信息\n",name);

}else{

printf(" ----------------------------------------------------\n");

printf("|学号\t|姓名\t|性别\t|语文\t|数学\t|英语\t|总分|\n");

printf(" ----------------------------------------------------\n");

printf("|%d|%s\t|%s\t|%d\t|%d\t|%d\t|%d |\n",p->id,p->name,p->gender,p->Chinese,p->math,p->English,p->sum);

printf(" ----------------------------------------------------\n");

}

}else{

printf("无该查询方式\n");

}

}

  1. 输出学生信息

void printStuInfo(node *L){

printf(" ----------------------------------------------------\n");

printf("|学号\t|姓名\t|性别\t|语文\t|数学\t|英语\t|总分|\n");

printf(" ----------------------------------------------------\n");

node *p = L->next;

while(p != NULL){

printf("|%d|%s\t|%s\t|%d\t|%d\t|%d\t|%d |\n",p->id,p->name,p->gender,p->Chinese,p->math,p->English,p->sum);

printf(" ----------------------------------------------------\n");

p = p->next;

}

}

  1. 保存学生信息文件

int saveFile(node *L){

FILE *fp = fopen("C:/Users/iio/Desktop/studentInfo.txt","w");

  node st,*s,*t = L;

  if(fp == NULL){

  return 0;

}

node *p = L->next;

while(p != NULL){

fprintf(fp,"%d %s %s %d %d %d %d\n",p->id,p->name,p->gender,p->Chinese,p->math,p->English,p->sum);

p = p->next;

}

fclose(fp);

return 1;

}

  1. 读取学生信息文件

int ReadFile(node *L){

  FILE *fp = fopen("C:/Users/iio/Desktop/studentInfo.txt","r");

  node st,*s,*t = L;

  if(fp == NULL){

  return 0;

}

while(fscanf(fp,"%d %s %s %d %d %d %d",&st.id,st.name,&st.gender,&st.Chinese,&st.math,&st.English,&st.sum) != EOF){

s = (node *)malloc(sizeof(node));

*s = st;

t->next = s;

t = s;

t->next = NULL;

}

fclose(fp);

return 1;

 }

五、测试分析

  1. 主程序测试

  1. 增加学生信息测试

 

增加学生信息

2022005 林一 100 100 100 300

确认已保存入文件,且信息正确

增加信息测试无误

  1. 删除学生信息测试

 

删除学生信息

2022005 林一 100 100 100 300

确认文件内已删除

删除信息测试无误

  1. 修改学生信息测试

 

修改学生信息

修改前

2022005 林一 100 100 100 300

修改后

2022005 李玲 99 99 99 297

确认已修改

修改学生信息测试无误

  1. 查询学生信息测试

 

 

查询测试无误

  1. 输出学生信息

将文件内所有学生信息读取并打印出来

 

输出学生信息无误

  1. 退出系统

输入0退出系统

退出系统测试无误

以下是源代码,如果是人事信息管理系统也可以在此基础上改

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

//学生信息结构体 
typedef struct Node{
	int id;                  //学号 
	char name[50];           //姓名 
	char gender[10];         //性别 
	int Chinese,math,English;//语文、数学、英语成绩 
	int sum;                 //总分 
	struct Node *next;       //指针域,指向下一个学生 
}node;

node List;                   //链表 

int ReadFile(node *L);       //读取文件 
int saveFile(node *L);       //保存文件 
void welcome();                               //主函数界面
void printAddStuInfo();                       //打印增加学生信息
void InsertStudentInfo(node *L,node e);       //增加学生信息 
void printDelStuInfo(node *L);                //删除学生信息
void printFixStuInfo(node *L);                //修改学生信息 
void printFindStuInfo(node *L);               //查询学生信息 
node *findStuById(int id,node *L);            //通过学号查询学生信息 
node *findPreStuById(int id,node *L);         //通过学号查询学生信息 
node *findStuByName(char name[],node *L);     //通过姓名查询学生信息 
void printStuInfo(node *L);            	      //输出学生信息 
void exitSys();                               //退出系统 

//主函数界面 
int main()
{
	ReadFile(&List);
	int choice = 0;
	while(true){
		welcome();
	scanf("%d",&choice);
	switch(choice){
		case 1:    //增加学生信息 
			printAddStuInfo();
			break;
		case 2:    //删除学生信息 
			printDelStuInfo(&List);
			break;
		case 3:    //修改学生信息 
			printFixStuInfo(&List);
			break;
		case 4:    //查询学生信息 
			printFindStuInfo(&List);
			break;
		case 5:    //输出学生信息 
			printStuInfo(&List);
			break;
		case 0:    //退出管理系统 
			exitSys();
			break;
	}
	printf("是否继续操作?(yes:1/no:0)\n"); 
	scanf("%d",&choice);
	if(choice == 0){
		break;
	}
	}
	exitSys();
	return 0;
} 
//显示页面
void welcome()
{
	printf("***************Y***************\n");
	printf("********学生信息管理系统*******\n");
	printf("**      增加学生信息----1    **\n");
	printf("**      删除学生信息----2    **\n");
	printf("**      修改学生信息----3    **\n");
	printf("**      查询学生信息----4    **\n");
	printf("**      输出学生信息----5    **\n");
	printf("**      退出管理系统----0    **\n");
	printf("*******************************\n");
	printf("请输入对应的功能键(数字):\n");
} 
//打印增加学生信息 
void printAddStuInfo(){
	node st;
	printf("请输入新增学生的相关信息:\n");
	printf("学号:");
	scanf("%d",&st.id);
	printf("姓名:");
	scanf("%s",&st.name);
	printf("性别:");
	scanf("%s",&st.gender);
	printf("语文:");
	scanf("%d",&st.Chinese);
	printf("数学:");
	scanf("%d",&st.math);
	printf("英语:");
	scanf("%d",&st.English);
	st.sum = st.Chinese+st.math+st.English;
	
	InsertStudentInfo(&List,st);
}

void InsertStudentInfo(node *L,node e){
	node *h = L;
	node *s = (node *)malloc(sizeof(node));
	*s = e;
	s->next = h->next;
	h->next = s;
	
	saveFile(L);
}
//保存文件
int saveFile(node *L){
	FILE *fp = fopen("C:/Users/iio/Desktop/studentInfo.txt","w");
 	node st,*s,*t = L;
 	if(fp == NULL){
 		return 0;
	}
	node *p = L->next;
	while(p != NULL){
		fprintf(fp,"%d %s %s %d %d %d %d\n",p->id,p->name,p->gender,p->Chinese,p->math,p->English,p->sum);
		p = p->next;
	}
	fclose(fp);
	return 1;
} 
//打印删除学生信息 
void printDelStuInfo(node *L){
	int id,choice;
	printf("请输入要删除学生的学号信息\n");
	scanf("%d",&id);
	node *pre = findPreStuById(id,L);
	node *st = pre->next;
	if(st == NULL){
		printf("不存在学号为%d的学生信息\n",id);
		return;
	}
	
	//确认删除学生信息 
	printf(" ----------------------------------------------------\n");
	printf("|学号\t|姓名\t|性别\t|语文\t|数学\t|英语\t|总分|\n");
	printf(" ----------------------------------------------------\n");
	printf("|%d|%s\t|%s\t|%d\t|%d\t|%d\t|%d |\n",st->id,st->name,st->gender,st->Chinese,st->math,st->English,st->sum);
	printf(" ----------------------------------------------------\n");
	printf("是否删除该学生信息(yes:1/no:0)\n");
	scanf("%d",&choice);
	if(choice == 0){
		return;
	}else if(choice == 1){
		pre->next = st->next;
		st->next = NULL;
		free(st);
		saveFile(L);
	}else{
		printf("不存在该选项,请输入0/1"); 
	}
}
//修改学生信息 
void printFixStuInfo(node *L){
	int id,choice = 0; 
	printf("请输入要修改的学生的学号信息\n");
	scanf("%d",&id);
	node *st = findStuById(id,L);
	if(st == NULL){
		printf("不存在学号为%d的学生信息\n",id);
	}
	while(1){
		printf("修改姓名       --------1\n");
		printf("修改性别       --------2\n");
		printf("修改语文成绩   --------3\n");
		printf("修改数学成绩   --------4\n");
		printf("修改英语成绩   --------5\n");
		printf("请输入要修改的内容:");
		scanf("%d",&choice);
		switch(choice){
			case 1:
				printf("请输入修改后的姓名:");
				scanf("%s",st->name);
				break;
			case 2:
				printf("请输入修改后的性别:");
				scanf("%s",st->gender);
				break;
			case 3:
				printf("请输入修改后的语文成绩:");
				scanf("%d",&st->Chinese);
				break;
			case 4:
				printf("请输入修改后的数学成绩:");
				scanf("%d",&st->math);
				break;
			case 5:
				printf("请输入修改后的英语成绩:");
				scanf("%d",&st->English); 
				break;
		}
		printf("是否继续修改该学生信息(yes:1/no:0)");
		scanf("%d",&choice);
		if(choice == 0){
			st->sum = st->Chinese + st->math + st->English;
			printf("修改后的学生成绩如下:\n");
			printf(" ----------------------------------------------------\n");
			printf("|学号\t|姓名\t|性别\t|语文\t|数学\t|英语\t|总分|\n");
			printf(" ----------------------------------------------------\n");
			printf("|%d|%s\t|%s\t|%d\t|%d\t|%d\t|%d |\n",st->id,st->name,st->gender,st->Chinese,st->math,st->English,st->sum);
			printf(" ----------------------------------------------------\n");
			break;
		}
		saveFile(L);
	}
}
//查询学生信息 
void printFindStuInfo(node *L){
	int choice = 0,id;
	node *p;
	char name[50];
	printf("请输入查询方式(学号:1/姓名:0)\n");
	scanf("%d",&choice);
	if(choice == 1){
		printf("请输入查询学生的学号:\n");
		scanf("%d",&id);
		p = findStuById(id, L);
		if(p == NULL){
			printf("不存在学号为%d的学生的学生信息\n",id);
		}else{
			printf(" ----------------------------------------------------\n");
			printf("|学号\t|姓名\t|性别\t|语文\t|数学\t|英语\t|总分|\n");
			printf(" ----------------------------------------------------\n");
			printf("|%d|%s\t|%s\t|%d\t|%d\t|%d\t|%d |\n",p->id,p->name,p->gender,p->Chinese,p->math,p->English,p->sum);
			printf(" ----------------------------------------------------\n");
		}
	}else if(choice == 0){
		printf("请输入查询学生的姓名:\n");
		scanf("%s",&name);
		p = findStuByName(name, L);
		if(p == NULL){
			printf("不存在姓名为%s的学生的学生信息\n",name);
		}else{
			printf(" ----------------------------------------------------\n");
			printf("|学号\t|姓名\t|性别\t|语文\t|数学\t|英语\t|总分|\n");
			printf(" ----------------------------------------------------\n");
			printf("|%d|%s\t|%s\t|%d\t|%d\t|%d\t|%d |\n",p->id,p->name,p->gender,p->Chinese,p->math,p->English,p->sum);
			printf(" ----------------------------------------------------\n");
	}
	}else{
		printf("无该查询方式\n");
	}
}
//通过学号查询学生信息
node *findStuById(int id,node *L){
	node *p = L->next;
	while(p != NULL){
		if(p->id == id){
			return p;
		}
		p =p->next; 
	}
	return NULL;
} 
//查找前一个学生信息
node *findPreStuById(int id, node *L){
	node *p = L;
	while(p->next != NULL){
		if(p->next->id == id){
			return p;
		}
		p = p->next;
	}
	return NULL;
} 
//通过姓名查询学生信息
node *findStuByName(char name[],node *L){
		node *p = L->next;
	while(p != NULL){
		if(strcmp(p->name,name) == 0){
			return p;
		}
		p =p->next; 
	}
	return NULL;
} 
//输出学生信息 
void printStuInfo(node *L){
	printf(" ----------------------------------------------------\n");
	printf("|学号\t|姓名\t|性别\t|语文\t|数学\t|英语\t|总分|\n");
	printf(" ----------------------------------------------------\n");
	node *p = L->next;
	while(p != NULL){
		printf("|%d|%s\t|%s\t|%d\t|%d\t|%d\t|%d |\n",p->id,p->name,p->gender,p->Chinese,p->math,p->English,p->sum);
		printf(" ----------------------------------------------------\n");
		p = p->next;
	}
}
//退出系统 
void exitSys(){
	printf("感谢您的使用,再见。-Y\n");
	exit(0);
}
//文件读取
 int ReadFile(node *L){
 	FILE *fp = fopen("C:/Users/iio/Desktop/studentInfo.txt","r");
 	node st,*s,*t = L;
 	if(fp == NULL){
 		return 0;
	}
	while(fscanf(fp,"%d %s %s %d %d %d %d",&st.id,st.name,&st.gender,&st.Chinese,&st.math,&st.English,&st.sum) != EOF){
		s = (node *)malloc(sizeof(node));
		*s = st;
		
		t->next = s;
		t = s;
		t->next = NULL;
	}
	fclose(fp);
	return 1;
 }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值