IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 班级管理系统续集(C语言) -> 正文阅读

[C++知识库]班级管理系统续集(C语言)

我的上一个博客里面,是大概把这个课程设计的一些思路给讲了一下。

但是大家是不是期待我的密码登录呢?

哈哈哈,其实我也就是写了一个默认密码123456.

如果大家想要有独自的密码的话,这里我提供一个思路,那就是我们可以在结构体里面多加一个密码变量就行啦。

话不多说,我们直接上登录密码相关代码的实现:

int a=123456;//默认密码123456 
int login()			//我们可以给一个默认的密码; 
{					
	printf("\t**********请输入登录系统密码**********\n");
	while(1)
	{
		scanf("%d", &key);
		if(key==a)
		{
			printf("\t*****密码正确*****\n");
			return 1;//当密码正确时,我们返回1,进入系统 
		}
		printf("\t*****密码错误,请重新输入*****\n"); 
	}//while(login()!=1);//当返回值不是1时,就重新输入密码 
	system("cls");//此处清屏作用; 
}

下面就是控制台的输出(也就是演示结果):

?

那么接下来我就接上我昨天说的,把完整的代码给你们吧,然后演示界面我也会一并给出,大家可以做个参考:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
#include<process.h>
#define  N  66//此处直接用宏定义定义学生人数
int key;
struct date//出生年月的结构体变量 
{
	int year;
	int month;
	int day;
}; 
struct Student
{
	long int num;//学号
	char name[20];//姓名
	char sex[3];//性别
	struct date birthday;
	int age; //年龄
	char bz[50];//备注 
	struct Student *pNext;//首先我们创造一个节点,表示每一个学生,
	//此处指向下一个节点的指针 
 }ss[N];
 void menu()//菜单界面 
//int main ()
{
	//int c; 
	
	printf("\t********欢迎进入登录班级档案管理系统********\n");
	printf("\t|***********1.学生基本信息录入*************|\n");
	printf("\t|***********2.学生基本信息显示*************|\n");
	printf("\t|***********3.学生基本信息保存*************|\n");
	printf("\t|***********4.学生基本信息删除*************|\n");
	printf("\t|***********5.学生基本信息修改*************|\n");
	printf("\t|***********6.学生基本信息查询*************|\n");
	printf("\t|***********    7.退出系统    *************|\n");
	printf("\t|*********请输入您要执行的功能(0~7)********|\n"); 
	/*scanf("%d", &c);
	return c;*/
}
int a=123456;//默认密码123456 
int login()			//我们可以给一个默认的密码; 
{					
	printf("\t**********请输入登录系统密码**********\n");
	while(1)
	{
		scanf("%d", &key);
		if(key==a)
		{
			printf("\t*****密码正确*****\n");
			return 1;//当密码正确时,我们返回1,进入系统 
		}
		printf("\t*****密码错误,请重新输入*****\n"); 
	}//while(login()!=1);//当返回值不是1时,就重新输入密码 
	system("cls");//此处清屏作用; 
}
struct date* DATA;
 
 struct Student* pEnd, *pNew;
 struct Student* pHead=NULL;
 
 int iCount;//全局变量来表示链表长度
 struct Student* Create()//我们创建一个链表,来录入信息 
 {
 	/*struct Student* pHead=NULL;//初始化链表头指针为空 
 	struct Student* pEnd, *pNew;*/
 	iCount=0;//初始化链表长度;
	pEnd=pNew=(struct Student*)malloc(sizeof(struct Student));
//	printf("请输入学生信息:\n");
	scanf("%ld", &pNew->num);
	scanf("%s", &pNew->name);
	scanf("%s", &pNew->sex);
	scanf("%d", &pNew->birthday.year);
	scanf("%d", &pNew->birthday.month);
	scanf("%d", &pNew->birthday.day);
	scanf("%s", &pNew->bz);
	while(1/*pNew->num!=0*/)//如果学号为零,就停止输入; 
	{
		iCount++;//iCount自增,表示链表中节点增加,同时也表示,学生的人数; 
		if(iCount==1)
		{
			pNew->pNext=pHead;//使得头指针为空; 
			pEnd=pNew;//跟踪加入新的节点 ; 
			pHead=pNew;//头指针指向首节点 ; 
		}
		else
		{
			pNew->pNext=NULL;//新节点的指针头为空 
			pEnd->pNext=pNew;//原来的尾节点指向新的节点 
			pEnd=pNew;	//pEnd指向新的节点 
		} 
		pNew=(struct Student*)malloc(sizeof(struct Student));//在此分配节点内存空间
		scanf("%ld", &pNew->num);
		scanf("%s", &pNew->name);
		scanf("%s", &pNew->sex);
		scanf("%d", &pNew->birthday.year);
		scanf("%d", &pNew->birthday.month);
		scanf("%d", &pNew->birthday.day);  
		//scanf("%d", &pNew->age=2022-pNew->birthday.year);
		scanf("%s", &pNew->bz);
		//printf("%d",pNew->num);
		if(pNew->num==0)
		{
			printf("录入成功!\n"); 
			return pHead;
		}
	}  
	free(pNew);//释放没有用到的空间; 
	return pHead;
  } 
  void  Print(struct Student* pHead)//我们现在用链表输出数据; 
  {
  	struct Student *pTemp;//这是我们创建的临时在循环所需要的指针;
	int ilndex=1;//表示链表中节点的序号
	
	printf("*****the List has %d members:*****\n", iCount);//消息提示 
	printf("\n"); 
	//pTemp=pHead;//我们定义的指针得到首节点的地址
	
	for(pTemp=pHead;pTemp;pTemp=pTemp->pNext)
	{
		printf("the NO %d member is :\n", ilndex);
		printf("     学号:%5ld", pTemp->num);
		printf("     姓名:%5s", pTemp->name);
		printf("     性别:%5s", pTemp->sex);
		printf("     年:%5d", pTemp->birthday.year);
		printf("     月:%5d", pTemp->birthday.month);
		printf("     日:%5d", pTemp->birthday.day);
		printf("     年龄:%5d", pTemp->age=(2022-pTemp->birthday.year));
		printf("     备注:%5s", pTemp->bz);
		printf("\n");
		ilndex++;
	 } 
  }
  void save1(struct Student* pHead)//n就相当于我们学生的人数,与N相关联 
  {//保存基本信息函数; 
  	FILE *fp;
  	struct Student *ptr;//此处我们定义一个新的指针,去遍历输入内容保存文件里面 
  	if((fp=fopen("keshe.txt", "w+"))==NULL)//以只写的方式打开课设文件 
  	{
  		printf("file cannot open!");
  		exit(0);
	}
	for(ptr=pHead;ptr;ptr=ptr->pNext)
	{
		fprintf(fp,"     学号:%5ld", ptr->num);
		fprintf(fp,"     姓名:%5s", ptr->name);
		fprintf(fp,"     性别:%5s", ptr->sex);
		fprintf(fp,"     年:%5d 月:%5d 日:%5d", ptr->birthday.year,ptr->birthday.month,ptr->birthday.day);  
		fprintf(fp,"     年龄:%5d", ptr->age=(2022-ptr->birthday.year));
		fprintf(fp,"     备注:%5s", ptr->bz);
		fprintf(fp,"\n");
	}
	fclose(fp); 
  }
  
  void search();//我们定义查询函数,这是总的查询函数,做个函数声明 
  void find1()//按学号查询; 
  {
  	int isprime=0;//此变量用来查询是否查找成功 
  	long int xhcx;
  	printf("请输入你要查询的学号:\n"); 
  	scanf("%ld", &xhcx);
  	struct Student *ptr1;
  	for(ptr1=pHead;ptr1;ptr1=ptr1->pNext)
  	{
  		if(xhcx==ptr1->num)
	    {
			printf("恭喜你,确有此人!\n");
			printf("学号:%ld,姓名:%s,年龄:%d,备注:%s\n", ptr1->num,ptr1->name,ptr1->age,ptr1->bz);		  	
			isprime=1;
			break;
		}	
	}
  		if(isprime==0)
  		{
  			printf("查询无果!\n");
		  }
  } 
  void find2()//按姓名查询; 
  {
  	int isprime1=0;
  	char xmcx[20];
  	printf("请输入你要查询的姓名:\n");
  	scanf("%s", &xmcx);
  	struct Student *ptr2;
  	for(ptr2=pHead;ptr2;ptr2=ptr2->pNext)
  	{
  		if(strcmp(xmcx,ptr2->name)==0)
	    {
			printf("恭喜你,确有此人!\n");
			printf("学号:%ld,姓名:%s,年龄:%d,备注:%s\n", ptr2->num,ptr2->name,ptr2->age,ptr2->bz);		  	
			isprime1=1;
			break;
		}	
	}
  		if(isprime1==0)
  		{
  			printf("查询无果!\n");
		  }
  }
  void find3()//按性别查询; 
  {
  	int isprime2=0;
  	char xbcx[3];
  	printf("请输入你要查询的性别:\n");
  	scanf("%s", &xbcx);
  	struct Student *ptr3;
  	for(ptr3=pHead;ptr3;ptr3=ptr3->pNext)
  	{
  		if(strcmp(xbcx,ptr3->sex)==0)//我们性别还没搞好; 
	    {
			printf("恭喜你,确有此人!\n");
			printf("学号:%ld,姓名:%s,年龄:%d,备注:%s\n", ptr3->num,ptr3->name,ptr3->age,ptr3->bz);		  	
			isprime2=1;
			
		}	
	}
  		if(isprime2==0)
  		{
  			printf("查询无果!\n");
		  }
  }
  void find4()//按年龄查询; 
  {
  	struct Student *ptr4;
  	int isprime3=0;
  	int nlcx;
  	printf("请输入你要查询的年龄:\n");
  	scanf("%d", &nlcx);
  	for(ptr4=pHead;ptr4;ptr4=ptr4->pNext)
  	{
  		if(nlcx==ptr4->age)
	    {
			printf("恭喜你,确有此人!\n");
			printf("学号:%ld,姓名:%s,年龄:%d,备注:%s\n", ptr4->num,ptr4->name,ptr4->age,ptr4->bz);		  	
			isprime3=1;
			
		}	
	}
  		if(isprime3==0)
  		{
  			printf("查询无果!\n");
		  }
  }
  void search()
  {//查询信息函数 
  	struct Student* pHead;
  	 printf("\t*****请输入你要查询的方式*****\n");
	 printf("\t***1.按学号查询***\n");
	 printf("\t***2.按姓名查询***\n");
	 printf("\t***3.按性别查询***\n");
	 printf("\t***4.按年龄查询***\n");
	 int m;
	
	 do
	 { 
	 scanf("%d", &m);
	 switch(m)
	  {
	 	case 1:find1();break;
		case 2:find2();break;
		case 3:find3();break;
		case 4:find4();break;
		default:
			printf("输入错误,请重新输入!\n");break;	
	  }
	 }while(m!=0);
  } 
  /*struct Student* Insert(struct Student *pHead)
  {
  	struct Student* pNew;
  	
  }*/
  void Delete(struct Student *pHead, int ilndex)//ilndex表示要删除的学号; 
  {//学生基本信息删除函数 
  	struct Student* pTemp;
  	pTemp=pHead;
  	for(pTemp; ;pTemp=pTemp->pNext)
  	{
  	/*	if(pHead->num==ilndex)
  		{
  			pHead=pHead->pNext;
  			break;
		}*/
		if(pTemp->pNext->num==ilndex&&pTemp->pNext->pNext==NULL)
				{
					pTemp->pNext=NULL;
					break;
				}//这个判断是为了删除尾节点; 
  		if(pTemp->pNext->num==ilndex)
  		{
  			pTemp->pNext=pTemp->pNext->pNext;
  			break;
		}//这个是为了删除中间的信息; 
	}
  } 
   void modify()
   {//修改信息函数 
   		int xgxx, isprime1=1; 
   		struct Student *xg;//我们定义一个修改的指针 
   		xg=pHead;//赋给它头指针; 
   		printf("\t***请输入你要修改哪项信息***\n");
   		printf("\t***1.修改学号***\n");
	    printf("\t***2.修改姓名***\n");
	    //printf("\t***3.修改性别***\n");
	    printf("\t***3.修改年龄***\n");
	 do
	 { 
	 scanf("%d", &xgxx);
	 switch(xgxx)
	  {
	 	case 1: long int xh1;
		 	    printf("\t***请输入你要修改的学号***\n");
				scanf("%ld", &xh1);
				for(xg; xg ;xg=xg->pNext)
				{
					if(xg->num==xh1)
					{
						printf("\t***请输入你修改后的学号***\n");
						long int xh2; 
						scanf("%ld", &xh2);
						xg->num=xh2;
						printf("\t***修改成功!***\n");
						break;
					}
				}
				isprime1=0;
				break;
		case 2: char xm1[20];
		 	    printf("\t***请输入你要修改的姓名***\n");
				scanf("%s", &xm1);
				for(xg; xg ;xg=xg->pNext)
				{
					if(strcmp(xg->name,xm1)==0)
					{
						printf("\t***请输入你修改后的姓名***\n");
						char xm2[20]; 
						scanf("%s", &xm2);
						strcpy(xg->name,xm2);
						printf("\t***修改成功!***\n");
						break;
					}
				}
				isprime1=0;
				break;
		//case 3:find3();break;
		case 3:int nl1;
		 	    printf("***\t请输入你要修改的年龄***\n");
				scanf("%d", &nl1);
				for(xg; xg ;xg=xg->pNext)
				{
					if(xg->age==nl1)
					{
						printf("\t***请输入你修改后的年龄***\n");
						long int nl2; 
						scanf("%ld", &nl2);
						xg->age=nl2;
						printf("\t***修改成功!***\n");
						break;
					}
				}
				isprime1=0;
				break;
		default:
			printf("输入错误,请重新输入!\n");break;	
	  }
	 }while(isprime1!=0);
   }
 long int xh;//这是我们定义的一个全局变量,主要就是我们删除时,我们是学号删除。 
main()
{
	struct Student *pHead;//定义头节点
	int hh;
	if(login()==0)
	{
		return 0;
	}
	menu();
	FILE *fp2;
	if((fp2=fopen("keshe.txt", "r+"))==NULL)
	{
		printf("***文件打开失败!***\n");
		exit(0);
	}
    while(1)
	{
		scanf("%d", &hh);
		switch(hh)
		{
		  	case 1:printf("请输入学生信息:\n");
			  	   pHead=Create();//创建节点
				   //printf("读取中...\n");//插进去完全就是为了逼格高一点 
				   //Sleep(1000);
				   break;
			case 2:Print(pHead);break;//输出链表;			
			case 3:save1(pHead); break;//保存信息函数; 
			case 4:printf("请输入你要删除学生的学号:\n");scanf("%ld", &xh);Delete(pHead,xh);break;  
			case 5:modify();break;//修改信息函数 
			case 6:search();break; //查询信息函数,里面嵌套四个小函数。
			case 7:printf("\t***安全退出系统,欢迎下次使用!***\n");break; 
			default:printf("*****输入错误,请重新输入你要选择的服务*****\n");break; 
		} 
		Sleep(3000);
		system("cls");
		menu();
	}
}

以上就是完整的整个课设的代码了。有一些小小的bug。这个只能靠各位自己解决啦。我只能写到这种程度了。

那么演示的第一张我已经放在了登录密码那里了,就在上面哈。

①.学生基本信息的录入

先输入1,进入功能1.这里我们就可以开始输入学生的基本信息了。

?这里其实大家也可以看出来我的一个小毛病。那就是我们录入的时候我们啥时候结束呢?

这个时候,我奇怪的想法开始作祟了。我直接来个循环,遇到0就给我结束,哈哈哈!亲测有效。

②.学生基本信息的输出(显示):这里输入2就好了。(因为我用了闪屏功能(这纯纯装个逼))

?③.学生基本信息的保存:这里也是输入一个3就好了。这里会保存到文件里面,所以大家一定要找得到你的文件在哪里。哈哈哈!

?④.学生基本信息的删除:这里输入4,然后会有提示信息:跟着提示输入就好啦!

温馨提示:因为我这里是有bug的,不能删除第一个,不能删除第一个,不能删除第一个,(重要的事情说三遍)。切记切记!!!

?这里我们已经把学号为2的人删掉了,也就是李四啦!为了检验我们是否删除成功,我们在显示一边学生的基本信息(只需要输入2 就好啦!):

?这里也能看出,没有错误。

⑤.学生基本信息的修改:这里输入5,然后跟着提示输入就好啦!有好几种呢!这里就演示一种。

?修改成功了之后,我们也要为了检查一下是否真的修改成功了,我们这是也是只需要输入2就可以查看学生信息了。

第一个学生的学号变成了5,说明我们修改成功了?。

⑥.学生基本信息的查询:按下6,然后跟着提示做就好啦!

差点忘记说六怎么结束了:

我们只需要输入0,然后它会显示驶入错误,别动它就好啦!他三秒之后就会清屏的。

?⑦.我就不多说了吧,一个小小的退出系统啦!(很简单的)

?最后,这个班级档案管理系统,到这里也已经算是较完善了。如果有什么不好的地方,也欢迎大家指正呀!

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:02:42  更:2022-07-17 16:06:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/12 21:54:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码