栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

学生管理系统总结(c)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

学生管理系统总结(c)

学生管理系统总结

在寒假的一个多月,断断续续完成了管理系统的任务,基本的增删改查任务都能实现,但是在很多细节处有很多bug。
在写管理系统的时候,我是用分文件的方式编写,主文件只有几行用来调用主目录的函数,剩余四个.h文件分别用来存储登陆系统,学生,教师,管理员的代码,如下图所示:

1.登陆系统
然后我们首先来看登陆系统,登陆系统要求实现四个功能,如下图所示:

首先要写的是注册账户,注册要分三种身份来分开写,要注意的是,一定要遵循常理,学生一定不可以注册教师和管理员的账号,对此在注册管理员和教师的时候分别要输入一段密钥,只有密钥正确才可以继续注册,注册完成后,将账号密码储存在txt文件里,要注意的是注册学生时一定要先判断学生的学号是否已经注册过了,只有学号没注册过并且符合要求的学号才可以注册。

注册成功后跳转至主页面,可以进行登陆操作,登陆时同样分三种身份不同登录,登陆成功直接跳转至相应的.h文件。
在我们使用常用app的时候可以发现,在登陆的时候密码会被隐藏显示为‘*’,在写管理系统时也可以运用这一点来增强管理系统的可行性,代码如下:

void secretword(char key[]){//密码加密 
    unsigned char c;
    int i=0;
    while((c=getch())!='r'){
        if(i<20&&isprint(c)){
            key[i]=c;
            i++;
            putchar('*');
        }
        else if(i>0&&c=='b'){
            i--;
            putchar('b');
            putchar(' ');
            putchar('b');
        }
    }
    printf("n");
    key[i]='';
} 

我们可以来看一下运行效果:

2.学生端
我们先来看看学生端的目录和功能:

void xueshengmenu(char*xuehao)
{
	printf("1.查询成绩n");
    printf("2.查询本班成绩n");
    printf("3.成绩分析n");
    printf("4.成绩申诉n");
    printf("5.返回上一层:n");
    printf("0.退出系统n");
    char a[20];
    scanf("%s",a);
    if(a[1] != ''){
		printf("错误输入n");
		printf("按任意键重新回到界面n");
		getchar();
		getchar();
		xueshengmenu(xuehao); 
	}else{
		switch (a[0]){
			case '0':
				exit(0);
			    break;
			case '1':
				chaxunziji(xuehao);
			    break;
			case '2':
				chaxunbanji(xuehao);
			    break;
			case '3':
				chengjifenxi(xuehao);
				break;
			case '4':
				chengjishensu(xuehao);
				break;
			case '5':
				xueshengmenu(xuehao);
				break;
			default:
				printf("输入错误请重新输入:n");
				xueshengmenu(xuehao);
				break;
		}
    }
}

第一项查询成绩,在登陆的时候,账号密码和学号已经进行了绑定,因此直接提取文件信息,把文件信息存储在链表里,然后逐步遍历各个节点,找到学号相同的,把各项成绩打印出来即可,提取文件信息的代码可见下图:

Stu*tiqu2(char name[]){//提取文件信息 
    FILE *fp = fopen(name,"r");
	if(fp == NULL){
		printf("未找到文件%sn",name);
		exit(0);
	}
	Stu *head = (Stu*)malloc(sizeof(Stu));
	head->next = NULL;
	while(!feof(fp)){
		Stu *p = (Stu*)malloc(sizeof(Stu));
		fscanf(fp,"%s %s %s %d %d %dn",p->name,p->number,p->class0,&p->c,&p->python,&p->java);
		p->next = head->next;
        head->next = p;
	}	
	fclose(fp);
	return head;
}

第二项查看全班的成绩和第一项基本相同,省去了遍历结点的过程,把信息全部打印出来即可。
第三项成绩分析,成绩分析即对成绩排序,这时就要用到链表的插入排序,对链表的信息进行排序,链表的插入排序可看前几期博客。
第四项成绩申诉,把成绩错误的学科输入在管理员的查看代办文件里,等待管理员审核即可。
3.教师端
首先来看教师端的目录和功能:

void jiaoshimenu(char *ban)
{
    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");
    char a[20];
    scanf("%s",a);
    if(a[1] != ''){
		printf("错误输入n");
		printf("按任意键重新回到界面n");
		getchar();
		getchar();
		jiaoshimenu(ban); 
	}else{
		switch (a[0]){
			case '1':
				zengjia(ban);
				break;
			case '2':
				shanchu(ban);
				break;
			case '3':
				xiugai2(ban);
				break;
			case '4':
				chaxun(ban);
				break;
			case '5':
				shuchu(ban);
				break;
			case '6':
				fenxi(ban);
				break;
			case '7':
				tixing(ban);
				break;
			case '8':
				jiaoshimenu(ban);
				break;
			case '0':
				exit(0);
				break;
			default:
			    printf("输入错误请重新输入:n");
				jiaoshimenu(ban);
				break;		
		}
	}
} 

教师端的功能和学生端有很多相同的地方,有的代码可以直接引用,但是还增加了修改学生信息和删除学生信息的功能,这里和查询成绩相似,把文件信息存储在链表里,然后进行链表的修改和删除操作(不会的可以参考前几期代码)即可,还有一个提醒管理员更新成绩的功能,和学生端的成绩申诉有相似之处,将信息写入管理员的文件里即可。
一定要注意在修改和增添学生信息的时候,一定要合理,不能使用整型输入,因为如果用户在输入时候输入其他字符类型,程序就会损坏,但是在字符串里同样需要控制输入的数字大小在0-100之间,不然就缺失了合理性。
还需要注意的一点就是教师在查找或者修改删除学生信息的时候,不能输入学生学号来查找学生信息,因为老师不可能记住每一个学生的学号,在这里应该选用输入姓名来查找信息。
5.管理员
先来看管理员的目录和功能:

void guanliyuanmenu(){
    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("9.手动重新录入学生信息n");
    printf("a.返回上一层n");
    printf("0.退出系统n");
    char a[20];
    scanf("%s",a);
    if(a[1] != ''){
		printf("错误输入n");
		printf("按任意键重新回到界面n");
		getchar();
		getchar();
		guanliyuanmenu(); 
	}else{
		switch (a[0]){
			case '1':
				chakan();
				break;
			case '2':
				jiaoshixiugai();
				break;
			case '3':
				zengjia2(); 
				break;
			case '4':
				shanchu2();
				break;
			case '5':
				xiugai3();
				break;
			case '6':
				chazhao2();
				break;
			case '7':
				luru2();
				break;
			case '8':
				shuchu2();
				break;
			case '9':
				shoudong();
				break;
			case 'a':
				guanliyuanmenu();
				break;
			case '0':
				exit(0);
				break;
				
		}
	}

}

首先第一项查看代办,即为查看之前学生端和教师端反馈的信息,然后按照要求逐步完成相应的操作即可。
在第二项进入教师端,一定要注意的是在进入之前一定要先确定教师的班级,然后调用教师的目录函数即可。
在后面的几项功能里同样要注意在教师里提到的,输入时要注意合理性

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/779275.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号