C之kpz学生信息管理系统

===========================================================================================================================================================================

一、系统概述

学生信息的管理是每个学校必须具有的管理功能,主要是对学生的基本情况进行管理。该系统模拟一个简单的学生信息管理系统,要求该系统对学生信息的进行增、删、改、查。

二、功能模块

功能模块图如下:
!
在这里插入图片描述

三、数据结构说明

学生信息管理系统需要一个数据文件info.dat,它用来存储学生信息,包含8个字段如下:

在这里插入图片描述

四、函数设计

(1)main()函数:将多个函数组合起来;
(2)Menu()函数:显示菜单选项;
(3)Show()函数:显示info.dat中的学生信息;
(4)Lookfor_num(int *n)函数:按学号查询学生信息;指针参数用于存放查询找到的位置;
(5)Lookfor_name(int *n)函数:按姓名查找学生信息;
(6)Lookfor()函数:查询学生信息子菜单,分为学号或者姓名查询;
(7)Update()函数:按学号查找要修改的学生信息;
(8)Insert()函数:添加学生信息;
(9)Delete()函数:删除学生信息;
(10)Conpos()函数:按照学号对学生信息进行排序并显示。

五、代码展示

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

struct Student{
	int num;			//学号
	char name[7];		//姓名 
	char sex[3];		//性别 
	char birth[8];		//出生年月 
	char native_p[5];	//籍贯 
	char tel[13];		//电话 
	char prof[7];		//专业 
	char hobby[30];		//爱好 
}stu[100];				//存放学生信息
int total;				//信息总数

char Menu(){		//主菜单 
	FILE *fp;
	char choice;
	if((fp=fopen("info.dat","rb"))!=NULL){
		rewind(fp);
		for(total=0;fread(&stu[total],sizeof(struct Student),1,fp)!=0;total++);
		fclose(fp);
	} 
	printf("\n		学生管理系统	\n");
	printf("		=============\n");
	printf("		S-显示学生信息\n");
	printf("		L-查询学生信息\n"); 
	printf("		U-修改学生信息\n");
	printf("		D-删除学生信息\n");
	printf("		I-插入学生信息\n");
	printf("		C-按学号排序\n");
	printf("		Q-退出系统\n");
	printf("		==================\n");
	do{
		scanf("%c",&choice);
	} while(choice!='s'&&choice!='S'&&choice!='l'&&choice!='L'&&choice!='u'
						&&choice!='U'&&choice!='i'&&choice!='I'&&choice!='d'
						&&choice!='D'&&choice!='c'&&choice!='C'&&choice!='q'
						&&choice!='Q');
	return choice;
}

void Show(){		//显示学生信息 
	FILE *fp;
	int i,j;
	if((fp=fopen("info.dat","rb"))==NULL){
		system("cls");
		printf("信息文件为空!按回车键返回!\n");
		getchar();
		getchar();
		system("cls");
		return; 
	}
	rewind(fp);
	system("cls");
	printf("\n		学生管理系统\n\n");
	printf("\n		显示学生信息\n");
	for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)!=0;i++);
	fclose(fp);
	printf("-------------------------------------\n");
	printf("\n学号	姓名	性别	出生年月	籍贯	专业	电话	爱好	\n");
	for(j=0;j<i;j++){
		printf("%-6d%-8s%-6s%-10s%-7s%-7s%-13s%s\n",stu[j].num,stu[j].name,
				stu[j].sex,stu[j].birth,stu[j].native_p,stu[j].prof,stu[j].tel,stu[j].hobby);
	}
	printf("--------------------------------------\n");
	printf("共有%d条记录!按回车键返回!\n",i);
	getchar();
	getchar();
	system("cls");
	
}

int Lookfor_num(int *n){		//按学号查询
	int lookfornum,i,k=0;
	printf("\n请输入学号:");
	scanf("%d",&lookfornum);
	system("cls");
	for(i=0;i<total;i++)
		if(lookfornum==stu[i].num){
			if(k==0){
				*n=i;
				printf("\n学号	姓名	性别	出生年月	籍贯	专业	电话	爱好	\n");
				printf("%-6d%-8s%-6s%-10s%-7s%-7s%-13s%s\n",stu[i].num,stu[i].name,
				stu[i].sex,stu[i].birth,stu[i].native_p,stu[i].prof,stu[i].tel,stu[i].hobby);
			}
			printf("------------------------------------------------------\n");
			k++;
		}
	return k; 
}

int Lookfor_name(int *n){		//按姓名查询
	char lookforname[7];
	int i,k=0;
	printf("\n请输入姓名:");
	scanf("%s",&lookforname);
	system("cls");
	for(i=0;i<total;i++)
		if(!strcmp(lookforname,stu[i].name)){
			*n=i;
			if(k==0){
				printf("\n学号	姓名	性别	出生年月	籍贯	专业	电话	爱好	\n");
				printf("%-6d%-8s%-6s%-10s%-7s%-7s%-13s%s\n",stu[i].num,stu[i].name,
				stu[i].sex,stu[i].birth,stu[i].native_p,stu[i].prof,stu[i].tel,stu[i].hobby);
			}
			printf("----------------------------------------------------\n");
			k++;
		}
	return k;
}

void Lookfor(){		//查询学生信息
	FILE *fp;
	int k,i;
	char chose;
	if((fp=fopen("info.dat","rb"))==NULL){
		system("cls");
		printf("信息文件为空!按回车键返回!\n");
		getchar();
		getchar();
		system("cls");
		return;
	} 
	rewind(fp);
	for(total=0;fread(&stu[total],sizeof(struct Student),1,fp)!=0;total++);
	fclose(fp);
	system("cls");
	do{
		printf("\n		学生管理系统\n\n");
		printf("====================\n");
		printf("		A-按学号查找\n");
		printf("		B-按姓名查找\n");
		printf("		Q-返回\n");
		printf("=================================\n");
		do{
			chose=getchar();
		} while(chose!='a'&&chose!='A'&&chose!='b'&&chose!='B'&&chose!='e'
				&&chose!='E'&&chose!='q'&&chose!='Q');
		switch(chose){
			case 'a' : case 'A':
				if((k=Lookfor_num(&i))==0)
					printf("无相关信息!按回车键返回!\n");
				else{
					printf("共找到%d条信息!按回车键返回!\n,k");
				}
				getchar();
				getchar();
				system("cls");
				break;
			
			case 'b' : case 'B':
				if((k=Lookfor_name(&i))==0)
					printf("无相关信息!按回车键返回!\n");
				else{
					printf("共找到%d条信息!按回车键返回!\n,k");
				}
				getchar();
				getchar();
				system("cls");
				break;
			
			case 'q': case 'Q':
				system("cls");
				return;
			
			default: break;
		}
	}while(1);
}

void Update(){		//修改学生信息 
	FILE *fp;
	char choseyn,chose4,newname[7],newsex[3],newbirth[8],newdegr[5];
	char newduty[7],newtel[13],newaddr[30];
	int n,chosenum,newnum,i;
	while(1){
		system("cls");
		printf("\n		学生管理系统\n\n");
		printf("\n		修改学生信息\n");
		printf("===========================================\n\n\n");
		if((Lookfor_num(&n))==0){
			printf("没有找到你要修改的信息!按回车键返回!\n");
			getchar();
			getchar();
			system("cls");
			return; 
		}
		else
			while(1){
				printf("\n\n1-学号 2-姓名 3-性别 4-生日 5-籍贯 6-专业  7-电话 8-爱好 0-返回\n");
				printf("\n 请输入修改内容的编号:");
				do{
					scanf("%d",&chosenum);
				}while(chosenum<0||chosenum>8);
				switch(chosenum){
					case 1:
						printf("\n请输入新学号:");
						scanf("%d",&newnum);
						stu[n].num=newnum;
						break;
						
					case 2:
						printf("\n请输入新姓名:");
						scanf("%s",newname);
						strcpy(stu[n].name,newname);
						break;
						
					case 3:
						printf("\n请输入新性别:");
						scanf("%s",newsex);
						strcpy(stu[n].sex,newsex);
						break;
						
					case 4:
						printf("\n请输入新生日:");
						scanf("%s",newbirth); 
						strcpy(stu[n].birth,newbirth);
						break;
						
					case 5:
						printf("\n请输入新籍贯:");
						scanf("%s",newdegr); 
						strcpy(stu[n].native_p,newdegr);
						break;
						
					case 6:
						printf("\n请输入新专业:");
						scanf("%s",newduty); 
						strcpy(stu[n].prof,newduty);
						break;
	
					case 7:
						printf("\n请输入新电话:");
						scanf("%s",newtel); 
						strcpy(stu[n].tel,newtel);
						break;
						
					case 8:
						printf("\n请输入新爱好:");
						scanf("%s",newaddr); 
						strcpy(stu[n].hobby,newaddr);
						break;
						
					default:
						break;
				}
				printf(" 修改成功!是否继续修改该学生信息?(y/n)\n");
				do{
					choseyn=getchar();
				}while(choseyn!='y'&&choseyn!='Y'&&choseyn!='n'&&choseyn!='N');
				
				if(choseyn=='n'||choseyn=='N')
					if((fp=fopen("info.dat","wb+"))==NULL){
						printf("打开信息文件失败!\n");
						exit(0);
					}else{
						rewind(fp);
						for(i=1;i<total;i++)
							fwrite(&stu[i],sizeof(struct Student),1,fp);
						fclose(fp);
						system("cls");
						break;
						}
					}
					printf("\n\n  是否修改其他学生的信息?(y/n)\n");
					do{
						chose4=getchar();
					}while(chose4!='y'&&chose4!='Y'&&chose4!='n'&&chose4!='N');
					
					if(chose4!='n'||chose4!='N'){
						system("cls");
						return;
					}
				
			}
	
}

void Insert(){		//插入学生信息
	FILE *fp;
	char chose_IQ;
	int i=-1;
	while(1){
		system("cls");
		printf("\n	学生管理系统\n\n");
		printf("		插入学生信息\n");
		printf("=========================================\n");
		if((fp=fopen("info.dat","ab+"))==NULL){
			printf("打开信息文件失败!\n");
			exit(0);
		} 
		i++;
		printf("\n请输入学号:");
		scanf("%d",&stu[i].num); 
		printf("\n请输入姓名:");
		scanf("%s",&stu[i].name); 
		printf("\n请输入性别(男/女):");
		scanf("%s",&stu[i].sex);
		printf("\n请输入生日(如2000.02):");
		scanf("%s",&stu[i].birth); 
		printf("\n请输入籍贯:");
		scanf("%s",&stu[i].native_p);
		printf("\n请输入专业:");
		scanf("%s",&stu[i].prof);
		printf("\n请输入电话(如0002225556):");
		scanf("%s",&stu[i].tel);
		printf("\n请输入爱好:");
		scanf("%s",&stu[i].hobby);
		fwrite(&stu[i],sizeof(struct Student),1,fp);
		printf(" 添加成功!\n\n");
		fclose(fp);
		printf("\n继续插入信息吗?(Y/N)\n");
		do{
			chose_IQ=getchar();
		}while(chose_IQ!='y'&&chose_IQ!='Y'&&chose_IQ!='n'&&chose_IQ!='N');
		if(chose_IQ=='n'||chose_IQ=='N')
			break;
	} 
	system("cls");
	 
}

void Delete(){		//删除学生信息 
	FILE *fp;
	char chose2;
	int deletnum,i,j,k=32767;
	char choseyn;
	while(1){
		system("cls");
		printf("\n	学生管理系统\n\n");
		printf("	删除学生信息\n");
		printf("========================================\n");
		printf("\n请输入学号:");
		scanf("%d",&deletnum); 
		system("cls");
		for(i=0;i<total;i++)
			if(deletnum==stu[i].num){
				k=i;
				break;
			}
			if(k>=total){
				printf("没有找到学生%d的信息!按回车键返回!\n",deletnum);
				getchar();
				getchar();
				system("cls");
				return;
			}
			else{
				printf("\n学号	姓名	性别	出生年月	籍贯	专业	电话	爱好	\n");
				printf("%-6d%-8s%-6s%-10s%-7s%-7s%-13s%s\n",stu[k].num,stu[k].name,
				stu[k].sex,stu[k].birth,stu[k].native_p,stu[k].prof,stu[k].tel,stu[k].hobby);
				printf("----------------------------------------------------------\n");
				printf("这是学号%d的信息!确定删除嘛?(Y/N)\n",stu[k].num);
				do{
					choseyn=getchar();
				}while(choseyn!='y'&&choseyn!='Y'&&choseyn!='n'&&choseyn!='N');
				if(choseyn=='y'||choseyn=='Y'){
					for(j=k;j<total;j++)
						stu[j]=stu[j+1];
					if((fp=fopen("info.dat","wb+"))==NULL){
						printf("打开信息文件失败!\n");
						exit(0);
					}
					for(i=0;i<total-1;i++)
						fwrite(&stu[i],sizeof(struct Student),1,fp);
					fclose(fp);
					printf("\n删除成功!\n");
					Sleep(2000);
				}
			}
			printf("\n继续删除信息吗?(y/n)\n");
			do{
				chose2=getchar();
			}while(chose2!='y'&&chose2!='Y'&&chose2!='N'&&chose2!='n');
			if(chose2=='n'||chose2=='N')
				break;
	}
	system("cls");
}

void Compos(){		//按关键字排序
	 FILE *fp;
	 char chose1;
	 int i,j,k=0,min=32767;
	 system("cls");
	 printf("\n学号	姓名	性别	出生年月	籍贯	专业	电话	爱好	\n");
	 printf("---------------------------------------------------------------------\n");
	 for(j=0;j<total;j++){
	 	for(i=0;i<total;i++)
	 		if(stu[i].num<min){
	 			min=stu[i].num;
	 			k=i;
			 }
			 min=32767;
			 printf("%-6d%-8s%-6s%-10s%-7s%-7s%-13s%s\n",stu[k].num,stu[k].name,
				stu[k].sex,stu[k].birth,stu[k].native_p,stu[k].prof,stu[k].tel,stu[k].hobby);
			 stu[k].num=32767;
	 }
	 if((fp=fopen("info.dat","rb+"))==NULL){
	 	printf("打开文件信息失败!\n");
	 	exit(0);
	 }
	 for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)!=0;i++);
	 //重新初始化数组下标,否则第二次排序的时候显示的学号全是32767
	 printf("\n排序完毕!按Y键返回!\n"); 
	 do{
	 	chose1=getchar();
	 }while(chose1!='y'&&chose1!='Y');
	 system("cls");
}


int main(){
	char choseyn;
	do{
		switch(Menu()){
			case 's': case 'S': Show(); break;
			case 'l': case 'L': Lookfor(); break;
			case 'u': case 'U': Update(); break;
			case 'i': case 'I': Insert(); break;
			case 'd': case 'D': Delete(); break;
			case 'C': case 'c': Compos(); break; 
			case 'q': case 'Q': printf("真的要退出吗?(Y/N)\n");
				do{
					choseyn=getchar();
				}while(choseyn!='y'&&choseyn!='Y'&&choseyn!='N'&&choseyn!='n');
				if(choseyn=='y'||choseyn=='Y'){
					printf("谢谢使用!拜拜!\n");
					Sleep(2000);
					return 0;
				}
		}	defalut: break;
	}while(1);
	return 0;
}

六、结束语

1、在参考本系统时,若发现有错误或者疑问,可以提出;
2、还请各位大佬提出不足与建议,谢谢!
3、感谢各位大佬的观看,谢谢!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
摘要 现在高校的学生信息的管理趋向于复杂化和多元化,随着计算机的广泛应用,越来越多的高校均采用了计算机化的管理模式。查询、修改、录入、删除等基本操作都采用了计算机的数据库技术。比起以前使用卡片的方法有了很大的进步,方便管理,易于更新,极大的方便了学生信息的管理工作。 关键词:学生信息;数据库; 系统维护 Abstract:The management of the student of the university of now information trends to complicate and pluralism, with the wide application of the computer, more and more universities have adopted the management mode of computerization。Have inquired about, revised, input, deleted etc. and operated and adopted the database technology of the computer basically. Using the method of the card to been greatly improved compared with before, it is convenient to manage, easy to upgrade, the great management of facilitating student's information. Key words: system maintain, database 一、引言 1.1介绍本课题的目的和意义 学生信息管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生信息管理系统应该能够为用户提供充足的信息和快捷的查询手段 1.2在国内外发展概况及存在问题 一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。作为计算机应用的一部分,使用计算机对学生信息进行管理,具有着手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高学生信息管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。 本课题采用ASP语言,一方面适应大众的需求,另一方面在系统的设计方面更加流畅,方便。 因此,开发这样一套管理软件是很有必要的事情。。 1.3本课题应解决的主要问题、指导思想及应达到的技术要求 1能够实现对数据库中的基本信息的各种查询和维护(增、删、改),同时注意用户的权限。 2. 能够生成并打印各种报表。如学生基本信息表、学生点名薄.可完成教师成绩录入及打印,学生成绩查询。 3.具有统计功能,如计算各班的英语四六级通过率等。 4.系统相关的功能,如系统维护,界面友好,用户操作简单方便。 5.系统运行模式是基于B/S体系结构。 二、系统概述 2.1系统设计背景 随着学校规模的不断扩大,学生数量急剧增加,有关学生的各种信息也成倍增加。面对庞大的信息量,就需要学生信息管理系统来提高学生管理工作的效率。通过这样的系统,可以做到信息的规范管理、科学统计和快速的查询,从而减少管理方面的工作量。 2.2系统的功能简介
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值