学生学籍管理系统源码

C语言课程设计-学生学籍管理系统源码


主要内容:


开发一个简单的学生学籍管理系统 ,实现以下功能:
【基本功能】

  1. 实现学院、专业和班级信息的维护管理。
  2. 实现学生信息的维护管理。
  3. 实现学生学籍信息的维护管理。
  4. 实现学生学籍信息的查询管理。

【扩展功能】
可以按照自己对学生学籍管理系统的需求理解进行扩展。比如:(1)权限处理 (2)模糊查询(3)综合查询(4)统计功能等。总之,可以根据自己的需求分析进行功能扩展。


任务要求:


一、提交材料应包括:(1)系统源代码 (2)课程报告
二、整个设计过程具体要求
(1)需求分析 要求学生对案例系统进行分析,设计出需要完成的功能,完善各个模块的调用关系;
(2)设计过程 要求学生进一步明确各模块调用关系,进一步完善模块函数细节(函数名、参数、返回值等);
(3)实现过程 要求学生养成良好的编码习惯、完成各个模块并进行测试,最终完成系统整体测试;
(4)总结阶段 按照要求完成系统设计和实现报告,并进行总结、答辩。


源码:

myproject.h

#include<stdio.h>
#include<stdlib.h>
#include<string.h> 
#define LEN 16//最大字符数,可根据实际修改 

struct student 
{
	char StudentId[LEN];                //学生学号 
	char StudentName[LEN];              //学生姓名 
	char StudentAge[LEN];               //学生年龄 
	char StudentSex[LEN];               //学生性别 
	char StudentCollege[LEN];           //学生学院 
	char StudentMajor[LEN];             //学生专业 
	char StudentClass[LEN];             //学生班级 
	char StudentTelephoneNumber[LEN];   //学生电话 
	struct student *next;
}*head,*p,*q,*p1,*p2,*q1,*q2;//head表示开头,*p,*q,*p1,*p2,*q1,*q2是在函数中用到的结构体指针 

void Add(void);              //增添函数 
void Delete(void);           //删除函数 
void Seek(void);             //查找函数 
void Modify(void);           //修改函数 
void Browse(void);           //浏览函数 
void Statistics(void);       //统计函数 
void Save(void);             //保存函数 
void Read(void);             //读取函数 

Main.c

#include"myproject.h"

int n = 0;//n用来记录学生信息数据输入量

int main(void)
{
	system("color 0F");//背景色为黑色,前景色为亮白色 
	int a=1;//main中两个循环的执行条件和switch的表达式 
	char acc[16],pas[16];
	while(a!=0)//a判断循环的执行 
    {
    	system("cls");
		printf("★请输入账号:\n");
	    scanf("%s",acc);
	    printf("★请输入密码:\n");
	    scanf("%s",pas);		
	    
	    if((strcmp(acc,"admin")==0)&&(strcmp(pas,"123456")==0))
	    {
	        system("cls");
		    printf("************欢迎使用学生学籍管理系统************\n"); 
		    printf("\n★第一次进入系统请先保存学生信息建立相关文档!★\n");
			printf("\n★每次使用该系统时请读取学生信息以便对其操作!★\n");
			printf("\n★每次退出该系统时请保存学生信息一方数据丢失!★\n");
			printf("\n★请按系统显示序号正确输入,否则将会出现错误!★\n");
			printf("\n★系统还有很多功能有待完善,欢迎联系提供意见!★\n\n");
			system("pause");

	        while(a!=0)
			{
				system("cls");
				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("*                        ★0.退出学生系统                        *\n");
				printf("******************************************************************\n"); 
				printf("                         请从序号0-8中选择:");
				
				scanf("%d",&a);
				
				if(a>=0 && a<=8)
				{
					switch(a)//a控制子函数的调用 
					{
					case 1:
						Add();break;
					case 2:
						Browse();break;
					case 3:
						Seek();break;
					case 4:
						Delete();break;
		     		case 5:
		     			Modify();break;
					case 6:
						Statistics();break;
					case 7:
						Read();break;
					case 8:
						Save();break;
					}
				}
				else//a的值输入错误 
				{
					printf("★您的输入错误,将返回主菜单!★\n");
					system("pause");
				}
			}
	    }
	    else//账号密码输入错误 
	    {
	        printf("★账号或密码输入错误,请再次尝试!★\n");
	        system("pause");
	    }     
    }	
	return 0;
}

Add.c

#include"myproject.h"

extern int n;

void Add(void)
{ 
	p1=(struct student *)malloc(sizeof(struct student));//动态内存分配 
	int m;
	
	printf("***输入样例:2020160101  lihua  20  M  xinxixueyuan  jisuanji  jike2001  1001011***\n"); 
	printf("***********************请 不 要 重 复 输 入 学 号 哦 !***************************\n"); 
	 
	if(n==0)
	{
		head=p1;
		printf("学生学号:");
		scanf("%s",&p1->StudentId);		
	}                               
	else 
	{
		p2->next=p1;
loop:	printf("学生学号:");
		scanf("%s",&p1->StudentId);
		q=head;
		m = n;
		while(m--)//m控制循环次数 
		{	                                      	
			if(strcmp(p1->StudentId,q->StudentId)==0)
			{
				printf("\n您输入的学号重复,请重新输入!\n");
				goto loop; 
			}
			q=q->next;                 
		}
	}
				                         
	printf("学生姓名:");
	scanf("%s",&p1->StudentName);
	printf("学生年龄:");
	scanf("%s",&p1->StudentAge);
	printf("学生性别:");
	scanf("%s",&p1->StudentSex);
	printf("学生学院:");
	scanf("%s",&p1->StudentCollege);
	printf("学生专业:");
	scanf("%s",&p1->StudentMajor);
	printf("学生班级:");
	scanf("%s",&p1->StudentClass);
	printf("学生电话:");
	scanf("%s",&p1->StudentTelephoneNumber);

	p2=p1;                   //p2指向p1所在的地址
	p2->next=NULL;           //链表结束标志
	n++;                     //n用于记录数据输入量 
	system("pause");         //系统暂停函数 
	system("cls");           //系统清屏函数 
}

Delete.c

#include"myproject.h"

extern int n;
 
void Delete(void)
{
	if(n!=0)
	{                
		char a[LEN];
		int flag=0;//flag为标志变量,用于判断输入学号后是否能正常操作 
		printf("请输入要删除的学号:");
		scanf("%s",&a);
		p=head;
		
		if(strcmp(head->StudentId,a)==0)
		{
			q1=head;
			head=head->next;
			free(q1);//释放该内存地址 
			flag=1;
		}
		else
		{
			p=head;
			do
			{
				if(strcmp(p->StudentId,a)==0)
				{
					q1=p;
					q2->next=p->next;
					free(q1);
					flag=1;
					break;
				}
				q2=p; //q2暂时指向p,之后p再指向下一个节点,如果这个是要删除的节点那么q2指向这个节点的next的地址                          
				p=p->next;
			}while(p!=NULL);
		}
		
		if(flag==0)//对输入学号进行判断 
		{
			printf("\n★学号输入有误,返回主菜单!★\n");
		}
		else
		{
			printf("\n★数据已经被删除!★\n");
			n--;
		} 
	}
	else
	{
		printf("\n★出错啦,还没有添加数据呢!★\n");
	}
				  
	system("pause");
	system("cls");
}

Seek.c

#include"myproject.h"

extern int n;

void Seek(void)
{
	int b,flag=0;//flag为标志变量,用于判断输入学号后是否能正常操作
	char a[LEN];
	
	if(n!=0)
	{
		printf("\n1.按学号查找:\n");
		printf("2.按学院查找:\n");
		printf("3.按专业查找:\n");
		printf("4.按班级查找:\n");
		printf("请从序号1-4中选择:");
		scanf("%d",&b);
		if(b>=1 && b<=4)
		{
			printf("请输入要查找的名称:");
			scanf("%s",&a);
			p=head;//指针指向开头
			switch(b)
			{
				case 1://按学号查找 
					do
					{	                                      
						if(strcmp(a,p->StudentId)==0)
						{
							printf("\n信息已被找到:\n学号\t\t姓名\t\t年龄\t性别\t学院\t\t专业\t\t班级\t\t电话\n");
							printf("%-16s%-16s%-8s%-8s%-16s%-16s%-16s%-16s\n",p->StudentId,p->StudentName,p->StudentAge,p->StudentSex,p->StudentCollege,p->StudentMajor,p->StudentClass,p->StudentTelephoneNumber);
							flag=1;
						}
						p=p->next;//指针指向下一个节点                            
					}while(p!=NULL);
					break;
				case 2://按学院查找 
					do
					{	                                      
						if(strcmp(a,p->StudentCollege)==0)
						{
							printf("\n学号\t\t姓名\t\t年龄\t性别\t学院\t\t专业\t\t班级\t\t电话\n");
							printf("%-16s%-16s%-8s%-8s%-16s%-16s%-16s%-16s\n",p->StudentId,p->StudentName,p->StudentAge,p->StudentSex,p->StudentCollege,p->StudentMajor,p->StudentClass,p->StudentTelephoneNumber);
							flag=1;
						}
						p=p->next;                          
					}while(p!=NULL);
					break;
				case 3://按专业查找 
					do
					{	                                      
						if(strcmp(a,p->StudentMajor)==0)
						{
							printf("\n学号\t\t姓名\t\t年龄\t性别\t学院\t\t专业\t\t班级\t\t电话\n");
							printf("%-16s%-16s%-8s%-8s%-16s%-16s%-16s%-16s\n",p->StudentId,p->StudentName,p->StudentAge,p->StudentSex,p->StudentCollege,p->StudentMajor,p->StudentClass,p->StudentTelephoneNumber);
							flag=1;
						}
						p=p->next;                          
					}while(p!=NULL);
					break;
				case 4://按班级查找 
					do
					{	                                      
						if(strcmp(a,p->StudentClass)==0)
						{
							printf("\n学号\t\t姓名\t\t年龄\t性别\t学院\t\t专业\t\t班级\t\t电话\n");
							printf("%-16s%-16s%-8s%-8s%-16s%-16s%-16s%-16s\n",p->StudentId,p->StudentName,p->StudentAge,p->StudentSex,p->StudentCollege,p->StudentMajor,p->StudentClass,p->StudentTelephoneNumber);
							flag=1;
						}
						p=p->next;                            
					}while(p!=NULL);
					break;
			 } 
			system("pause");
			if(flag==0)//a的值输入错误 
			{
				printf("\n★输入有误,返回主菜单!★\n");
				system("pause");
			}
		}
		else//b的值输入错误 
		{
			printf("★输入错误,返回主菜单!★\n");
        	system("pause");
		}		
	}
    else//未添加数据 
    {
		printf("\n★出错啦,还没有添加数据呢!★\n");
		system("pause");
    }
} 

Modify.c

#include"myproject.h"

extern int n; 

void Modify(void)
{
	if(n!=0)
	{
		int b,flag=0;//flag为标志变量,用于判断输入学号后是否能正常操作 
		char a[LEN];
		printf("请输入要修改的学号:");
		scanf("%s",&a);
		p=head;
		do
		{
			if(strcmp(a,p->StudentId)==0)
			{
				printf("\n被修改人信息如下:\n学号\t\t姓名\t\t年龄\t性别\t学院\t\t专业\t\t班级\t\t电话\n");
				printf("%-16s%-16s%-8s%-8s%-16s%-16s%-16s%-16s\n",p->StudentId,p->StudentName,p->StudentAge,p->StudentSex,p->StudentCollege,p->StudentMajor,p->StudentClass,p->StudentTelephoneNumber);
				flag=1;
				break;
			}
			p=p->next;                        
		}while(p!=NULL);
		
		if(flag==0)
		{
				printf("\n★学号输入有误,返回主菜单!★\n");
		}
		else
		{
			printf("\n\n1.修改学号\n2.修改姓名\n3.修改年龄\n4.修改性别\n5.修改学院\n6.修改专业\n7.修改班级\n8.修改电话\n9.退出修改\n\n");
		
			scanf("%d",&b);
			switch(b)
			{
				case 1:
					printf("学号修改为:");
					scanf("%s",&p->StudentId);break;
				case 2:
					printf("姓名修改为:");
					scanf("%s",&p->StudentName);break;
				case 3:
					printf("年龄修改为:");
					scanf("%s",&p->StudentAge);break;
				case 4:
					printf("性别修改为:");
					scanf("%s",&p->StudentSex);break;
				case 5:
					printf("学院修改为:");
					scanf("%s",&p->StudentCollege);break;
				case 6:
					printf("专业修改为:");
					scanf("%s",&p->StudentMajor);break;
				case 7:
					printf("班级修改为:");
					scanf("%s",&p->StudentClass);break;
				case 8:
					printf("电话修改为:");
					scanf("%s",&p->StudentTelephoneNumber);break;
				case 9:
					break;
				}
			printf("\n\n★操作成功!★\n\n");
		}
	}			
	else
	{
		printf("\n★出错啦,还没有添加数据呢!★\n");
	}
			
	system("pause");
	system("cls");
}

SaveRead.c

#include"myproject.h"

extern int n;
 
void Save(void)
{
    FILE *fp;
    if((fp=fopen("studentdata.txt","wb"))==NULL)//只写打开或新建一个二进制文件,只允许写数据
    {
    	printf("\n错误,无法打开文件!\n");
    	exit(0);
	}	  
    p=head;  
    while(p!=NULL)
	{  
		if(fwrite(p,sizeof(struct student),1,fp)!=1)//将数据写入文件 
		{
			printf("\n写入数据出错\n");  
			fclose(fp);
			break;
        }  
        p=p->next;  
    }  
    fclose(fp);//文件关闭  
	printf("\n★存储完成★\n");
	system("pause");
	system("cls");
}
void Read(void)
{
	FILE *fp;
	if((fp=fopen("studentdata.txt","rb+"))==NULL)//读写打开一个二进制文件,允许读数据 
	{
		printf("\n错误,无法打开文件!\n");
		exit(0);
	}
    do
	{ 
		p1=malloc(sizeof(struct student));
		if(n==0)//判断链表开头                                     
		{
			head=p1;	
		}                                     
		else
		{
			p2->next=p1; //p2的结尾所指向的地址是p1			
		}
		fread(p1,sizeof(struct student),1,fp);//对文件数据进行读取 
		p2=p1;
		n++;
    }while(p2->next!=NULL);
    fclose(fp);
	printf("\n★读取完成!★\n");
	system("pause");
	system("cls");
}

Statistics.c

#include"myproject.h" 

extern int n;

void Statistics(void)
{
	int c,d=0;
	char a[LEN];
	printf("\n当前已存储%d个学生的学籍信息!\n",n);
	printf("请输入你想统计的人数:\n");
	printf("1:统计学院人数\n");
	printf("2:统计专业人数\n");
	printf("3:统计班级人数\n");
	scanf("%d",&c);
	
	if(c>=1&&c<=3) 
	{
		printf("请输入要统计的名称:");
		scanf("%s",a);
		p=head;	
		switch(c)
		{
			case 1://统计学院人数 
				do
				{	                                      
					if(strcmp(a,p->StudentCollege)==0)
					{
						d++;
					}
					p=p->next;                           
				}while(p!=NULL);
				break;
			case 2://统计专业人数 
				do
				{	                                      
					if(strcmp(a,p->StudentMajor)==0)
					{
						d++;
					}
					p=p->next;                          
				}while(p!=NULL);
				break;
			case 3://统计班级人数 
				do
				{	                                      
					if(strcmp(a,p->StudentClass)==0)
					{
						d++;
					}
					p=p->next;                            
				}while(p!=NULL);
				break; 
		}
		printf("统计得到人数为%d人\n",d);
		system("pause");		
	}
    else
    {
        printf("★输入错误,返回主菜单!!★\n");
        system("pause");
    }
}

Browse.c

#include"myproject.h"

extern int n; 

void Browse(void)
{
	if(n!=0)
	{
		p=head;//p先指向开头
		printf("学号\t\t姓名\t\t年龄\t性别\t学院\t\t专业\t\t班级\t\t电话\n");//\t为水平制表符,相当于8个空格 
		do
		{
			printf("%-16s%-16s%-8s%-8s%-16s%-16s%-16s%-16s\n",p->StudentId,p->StudentName,p->StudentAge,p->StudentSex,p->StudentCollege,p->StudentMajor,p->StudentClass,p->StudentTelephoneNumber);
			p=p->next;//p打印结束 把p指向next以判断下一个区域有没有内容
		}while(p!=NULL);//只要p指向的内存区域有数据,就打印内容
	}
	else
	{
		printf("\n★还没有添加数据呢!★\n");		
	}
	system("pause");
	system("cls");
}
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
学籍管理系统是一种用于管理学校学生信息、学籍信息和成绩信息的软件系统。在使用JavaEE进行系统开发时,可以使用以下源码结构进行实现。 1. 数据库设计:通过MySQL或其他关系型数据库创建学生表、课程表、教师表、成绩表等数据表,定义各个表之间的关系。 2. 后端开发:使用JavaEE开发框架,比如Spring MVC或Struts2,实现后端业务逻辑处理。可以设计学生信息管理、课程信息管理、教师信息管理、成绩管理等模块。 3. 前端开发:使用HTML、CSS、JavaScript等技术进行前端页面的设计与开发。可以设计学生信息查询、成绩录入、课程查看等功能页面。同时,可以通过JSP或Thymeleaf等模板引擎技术与后端进行数据交互。 4. 数据交互:使用JDBC或ORM框架如Hibernate等与数据库进行数据交互,实现数据的增删改查操作。 5. 安全性设计:使用JavaEE的安全性机制,如实现基于角色的访问控制,通过登录、身份验证和授权实现系统安全。 6. 性能优化:通过缓存技术、数据库索引优化和代码优化等手段提升系统性能。 7. 部署与测试:使用Tomcat或其他JavaEE服务器部署系统,并进行测试和调试。 需要注意的是,以上仅为一个简单的源码框架,实际开发还需要根据具体需求进行细化设计和实现。对于学生学籍管理系统,还可以考虑其他功能的添加,如学生选课、课表管理等。同时,还需要保证系统的安全性和稳定性,遵循软件工程的开发流程进行项目管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会思想的苇草i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值