资讯 小学 初中 高中 语言 会计职称 学历提升 法考 计算机考试 医护考试 建工考试 教育百科
栏目分类:
子分类:
返回
空麓网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
空麓网 > 计算机考试 > 软件开发 > 后端开发 > C/C++/C#

成绩管理系统管理员版c语言

C/C++/C# 更新时间: 发布时间: 计算机考试归档 最新发布

成绩管理系统管理员版c语言

本人也是一位c语言初学者,如果真的想学习编程,建议还是从c语言开始学,了解计算机的基本逻辑。个人感觉面向对象编程的c++更难学。这个成绩管理系统涉及到的c语言基础还是挺全面的,其中大部分都是我照搬某位大哥的,改了一点小错误,增加了密码功能,防止数据被修改。大家相互学习吧。

这是完整的操作逻辑:

讲一下那个简单加密的基本原理就是进行两次异或运算值会还原,设置参数死加密,其实还是挺容易破解的。

 这三个文件分别是转码前的密码、储存在本地的密码(已简单转码)、和解码后的密码。

所有的排序使用的都是冒泡排序法。

下面是完整的源代码,有注释,看完估计需要一点时间。文件指针fpm指向加密成绩文件,fp指向我们需要操作的文件“cj.txt”。

//头文件
#include 
#include 
#include 
#include 
int random1=187361,random2=37896;//实现文件加解密的参数
//成绩结构体
struct score
{
	char snum[11];//学号
	char sname[11];//姓名
	float chinese;//单科成绩
	float math;
	float english;
	float sumcj;//总成绩
	int rank;//排名 
};
//函数声明 
void showmenu();//菜单    
void lr(int);//录入成绩
int sc(int);//删除成绩 
void xg(int);//修改成绩
void cx(int);//查询成绩 
void cxmenu(void);//二级成绩查询菜单 
void xhcx(int);//学号查询 
void xmcx(int);//姓名查询
void sumcx(int);//总成绩查询
void yw(int);//单科成绩查询
void sx(int);
void yy(int);
void over(int);//结束查询菜单
void jspm(int);//计算排名 
void xs(int);//成绩显示 
void js(int);//结束主菜单
void changep();//管理员密码配置
int main()
{
	int flag,n,count;struct score stu[200];char ch;//flag主菜单标志序号,n录入人数,count计当前人数。
	FILE *fp,*fpm;
	fp=fopen("cj.txt","w+");//cj.txt是当前成绩信息文件
	fpm=fopen("加密成绩信息.txt","a+");
	if(fpm==NULL)
	{
		printf("打开文件失败,请重试!n");
		getch(); 
		fclose(fpm);  
		exit(0);
	}
	if(fp==NULL)
	{
		printf("打开文件失败,请重试!n");
		getch(); 
		fclose(fp);
		exit(0);
	}
	FILE *fpp=fopen("password.txt","r");//password.txt是储存密码的文件
	if(fpp==NULL)
	{
		printf("打开密码文件失败,请联系技术支持!n");
		getch(); 
		fclose(fpp);
		exit(0);
	}
	int c;
	rewind(fpm);
	while ((c=fgetc(fpm))!=EOF) fputc(c^random1,fp);
	fclose(fpm);
	rewind(fp);
	ch=fgetc(fp);
	if(ch==EOF) count=0;//空文件
	else
	{  
		count=0;
		rewind(fp);
		while(!feof(fp))//文件没有读到末尾(至少执行一次)
		{
			fscanf(fp,"%s %s %f %f %f %f %dn",&stu[count].snum,&stu[count].sname,&stu[count].chinese,&stu[count].math,&stu[count].english,&stu[count].sumcj,&stu[count].rank);
			count++;
		}
	}
	fclose(fp);
	int id;
	printf("请选择身份:1.管理员 2.访客 3.退出n");
	do
	{
		scanf("%d",&id);
		if(id==1)
		{
			int c;char pass[20],idpass[20];
			printf("请输入管理员密码:");
			scanf("%s",&idpass);
			while(6>strlen(idpass)||strlen(idpass)>19)
			{
				printf("请重新输入:");
				scanf("%s",idpass);
			}
			FILE *fpj=fopen("jiema.txt","w+");//解码后的密码文件
			if(fpj==NULL)
			{
				printf("打开文件失败,请重试!n");
				getch(); 
				fclose(fpj);
				exit(0);
			}
			while ((c = fgetc(fpp))!= EOF) fputc(c^random2,fpj);
			fclose(fpp);
			rewind(fpj);
			fscanf(fpj,"%s",&pass);
			fclose(fpj);remove("jiema.txt");//用完即删,在文件缓冲区中即被删除
			if(!strcmp(pass,idpass))
			{
				do
				{
					showmenu();
					scanf("%d",&flag);//选择操作 
					switch(flag)
					{
						case 1: printf("请输入您要录入的人数:");
						scanf("%d",&n);
						lr(n);
						count += n;break;
						case 2: count=sc(count);break;
						case 3: xg(count);break;
						case 4: cx(count);break;
						case 5: jspm(count);break;
						case 6: xs(count);break;
					    case 7: changep();break;
						case 0: js(count);break; 
						default:printf("输入错误,请重试!n");getch();break; 
					} 
				}while(flag!=0);
				return 0;
			}
			else
			{
				printf("密码错误,请重试。若密码失效,请联系技术支持。");
				getch();
				return 0;
			}
		}
		if(id==2)
		{
			cx(count);
			return 0;
		}
		if(id==3) return 0;
		printf("身份选择错误,按重新输入:");
	}while(id!=3);
}
//0显示菜单
void showmenu()
{
	system("cls"); 
	printf("*----------------------------------------------------*n");
	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("*               0: 加密储存并退出系统                 *n");
	printf("*----------------------------------------------------*n");
	printf("选择操作<0-6>n");
	return;
}
//1录入成绩 
void lr(int n)
{
	struct score stu[200];
	FILE *fp;
	fp=fopen("cj.txt","a");
	if(fp==NULL)
	{
		printf("打开文件失败,请重试!n");
		getch(); 
		fclose(fp);
		exit(0);
	}
	printf("请输入全部学生的学号,姓名,语文成绩,数学成绩,英语成绩;n"); 
	int i;
	for(i=0;i<=n-1;i++)
	{	
		printf("----第%d个学生----n", i+1);
		printf("学号:");
		scanf("%s",&stu[i].snum);
		printf("姓名:");
		scanf("%s",&stu[i].sname);
		printf("语文成绩:");
		scanf("%f",&stu[i].chinese);
		printf("数学成绩:");
		scanf("%f",&stu[i].math);
		printf("英语成绩:");
		scanf("%f",&stu[i].english);	
		stu[i].sumcj=0;//总成绩和排名初始化为0
		stu[i].rank=0;
		fprintf(fp,"%s %s %.1f %.1f %.1f %.1f %dn",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank);
	} 
	fclose(fp);
	printf("添加学生成功,请按任意键返回n");
	getch();
}
//2删除成绩(建议删除成绩后重新计算排名)                                    
int sc(int n)
{
	struct score stu[200];
	struct score stuu[199];//删除后的结构体数组 
	char stnum[11];//学号
	int find=0;
	printf("请输入你要删除的学生学号:"); 
	scanf("%s", &stnum);
	FILE *fp;
	fp=fopen("cj.txt","r");
	if(fp==NULL)
	{
		printf("打开文件失败!n");
		getch(); 
		return -1;   
	}
	int c=0;
	int index=0;//用于记录目标序号 
	while(!feof(fp))//遍历文件
	{ 
		fscanf(fp,"%s %s %f %f %f %f %dn", &stu[c].snum,&stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank);
		if(strcmp(stnum,stu[c].snum)==0)
		{
			find = 1;//根据学号查找,找到赋值为1 
			index = c;//记录编号
		} 
		c++;
	}
	fclose(fp);
	if(find==0)
	{
		printf("没有该学生成绩信息,请按任意键返回n");
		getch();  
		return n;
	}
	else 
	{   int i;
		//删除 
		for(i=0;i                                          n");
}
//4.1学号查询
void xhcx(int n)
{   
	struct score stu[200];
	char snum[11];
	printf("请输入你要查询学生的学号:");
	scanf("%s",&snum);
	FILE *fp; 
	fp=fopen("cj.txt ","r");
	if(fp==NULL)
	{
		printf("打开文件失败!n");
		getch();
		exit(0); 
	}
	int c = 0;
	while(!feof(fp))
	{
		fscanf(fp,"%s %s %f %f %f %f %dn",&stu[c].snum,&stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank);
		c++;
	}
	int i;
	for(i=0;istrlen(pass)||strlen(pass)>19)
	{
		printf("密码格式错误,请重新输入:");
		scanf("%s",pass);
	}
	printf("请再次输入新密码(最小6位,最高19位,任意字母数字):");
	scanf("%s",&passtoo);
	if(!strcmp(passtoo,pass))
	{
		FILE *fpb=fopen("before.txt","w+");//转码前的密码文件
		if(fpb==NULL)
		{
			printf("打开文件失败,请重试!n");		
			getch(); 
			fclose(fpb);  
		}
		fprintf(fpb,"%s",passtoo);
		FILE *fpp=fopen("password.txt","w");
		if(fpp==NULL)
		{
			printf("打开文件失败,请重试!n");
			getch(); 
			fclose(fpp);  
		}
		rewind(fpb);
		int c;
		while ((c=fgetc(fpb))!=EOF) fputc(c^random2,fpp);
		fclose(fpp);fclose(fpb);remove("before.txt");//用完即删
		printf("密码配置成功,按任意键返回");
		getch();
		return;
	}
	else
	{
		printf("输入错误,按任意键返回");
		getch();return;
	}
}
//0加密保存信息并退出系统
void js(int n)
{
	FILE *fp,*fpm;
	fp=fopen("cj.txt","r");
	if(fp==NULL)
	{
		printf("打开文件失败,请重试!n");
		getch(); 
		fclose(fp);  
		exit(0);
	} 
	fpm=fopen("加密成绩信息.txt","w");
	if(fpm==NULL)
	{
		printf("打开文件失败,请重试!n");
		getch(); 
		fclose(fp);  
		exit(0);
	}
	int c;
	while ((c=fgetc(fp))!= EOF) fputc(c^random1,fpm);//这里用的是random1,与密码文件不同。
	fclose(fp);fclose(fpm);
	printf("总人数是%d,欢迎下次使用!按任意键结束程序", n);
	getch();
	remove("cj.txt");
	return;
}

在首次运行程序前需要初始化密码文件,否则程序无法运行。建议参考配置管理员密码函数写一个简单的转码器,用来初始化密码文件,注意参数要相同,另外可以随时修改密码,密码文件需要和程序在同一目录下。

转载请注明:文章转载自 http://www.konglu.com/
本文地址:http://www.konglu.com/it/982036.html
免责声明:

我们致力于保护作者版权,注重分享,被刊用文章【成绩管理系统管理员版c语言】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2023 成都空麓科技有限公司

ICP备案号:蜀ICP备2023000828号-2