学生选课管理系统,含链表的增,删,改,查,且保存到文件中,文件的读写,课设专版。

   代码原创,是学生选课管理系统,含链表的增,删,改,查,且保存到文件中,文件的读写和拿取,注册密码,用户名的保存,读取。                       本代码是验收课设和大作业的时候创作的,大家可以白嫖,记得给个关注,有问题评论区见,大家一起讨论

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int r=1; //quan ju bbianliang 
void ws();
	struct student{
		char bianhao[10] ;
		char name[10];
		char sex[10];
		char csny[10];
		char xueli[10];
		char zhiwu[10]; 
		 int all;
		 char zhuzhi[10];
		 char phone[100];
		char bumen[10]; 
		struct student *next;
	};
	typedef struct student stu;
	stu ss[10000];
	stu *head=(stu *)malloc(sizeof(stu));
	void setline(stu *head);
	void insert(stu *head);
	void shanchu(stu *head);
	
	class Worker{
        public:
	setline(stu *head);//建立链表,存储课程 
	dayin(stu *head);//浏览链表,查看课程信息 
	insert(stu *head);//增加课程信息
	shanchu(stu *head);//删除课程 
	serch(stu *head);//查找课程 
	gengxin(stu *head);//更新课程信息 
	filesave(stu *head);//保存课程信息到文件中 
	loadfile(stu *head);//冲文件中读取课程信息 
	menu();//菜单函数 
	zhuce();//注册函数 
	denglu();//登录函数 
	jiegouti();
 private:
	  	
};
class Student{
	public:
		xuanke();//选课函数 
		zhuce();//注册函数 
	    denglu();//登录函数 
	private:
};
	
 	int Worker::setline(stu *head){
		r=2;
		printf("想保存几门课");
		int N;
		scanf("%d",&N);
		int b;
		stu *p,*q;
		p=head;
		for(int i=1;i<=N;i++){
			system("cls");
			printf("请输入课程信息:\n");
			q=(stu *)malloc(sizeof(stu));
			printf("课程名称\n");
			scanf("%s",q->name);
			printf("课程性质\n");
			scanf("%s",q->bianhao);
			printf("学分\n");
			scanf("%d",&q->all);
			printf("总学时\n");
			scanf("%s",q->bumen);
			printf("授课学时\n");
			scanf("%s",q->sex);
			printf("上机学时\n");
			scanf("%s",q->csny);
			printf("开课学期\n");
			scanf("%s",q->xueli);
			printf("课程编号\n");
			scanf("%s",q->zhuzhi);
			printf("授课老师联系电话\n:");
			scanf("%s",q->phone);
			printf("\n"); 
		    p->next = q;      
		    p = q;        
			q->next=NULL;
		}
		q->next==NULL;
	}
	int Worker::dayin(stu *head){
		if(r==1){
			printf("请先输入课程信息,否则错误");
		}
		else{
		stu *q;
		q=head->next;
		if(q==NULL)
   {
       printf("此系统中无课程记录!\n");
       exit(0);
   }
		while(q->next!=NULL){
			printf("课程名称\n");
			printf("%s",q->name);
			printf("课程性质\n");
			printf("%s",q->bianhao);
			printf("学分\n");
			printf("%d",q->all);
			printf("总学时\n");
			printf("%s",q->bumen);
			printf("授课学时\n");
			printf("%s",q->sex);
			printf("上机学时\n");
			printf("%s",q->csny);
			printf("开课学期\n");
			printf("%s",q->xueli);
			printf("课程编号\n");
			printf("%s",q->zhuzhi);
			printf("授课老师联系电话\n:");
			printf("%s",q->phone);
			printf("\n");
			q=q->next;
		}
	}
}
	
	
	int Worker::insert(stu *head){
		if(r==1){
			printf("请先输入员工信息,否则错误");
		}
		else{
			
		stu *p,*q,*w;
		p=head->next;
		q=head;
		w=(stu *)malloc(sizeof(stu));//存储信息 
		printf("请输入插入员工信息(后方),输入第几个员工\n");
		printf("请输入插到第几个员工的后方");
		int n;
		scanf("%d",&n);
		for(int i=0;i<n;i++){
			p=p->next;
			q=q->next;
		}
	   	printf("姓名\n");
			scanf("%s",w->name);
			printf("编号");
			scanf("%s",w->bianhao);
			printf("总工资");
			scanf("%d",&w->all);
			printf("职务");
			scanf("%s",w->bumen);
			printf("性别");
			scanf("%s",w->sex);
			printf("出生年月");
			scanf("%s",w->csny);
			printf("学历");
			scanf("%s",w->xueli);
			printf("地址");
			scanf("%s",w->zhuzhi);
			printf("电话");
			scanf("%s",w->phone);
		    q->next=w;
		    w->next=p;
		}
	}
	int Worker::shanchu(stu *head){
		if(r==1){
			printf("请先输入课程信息,否则错误");
		}
		else{
		char name[10];
		stu *p,*q,*w;
		w=(stu *)malloc(sizeof(stu));
		q=head;
		p=head->next;
		printf("请输入删除课程的名称:\n");
		scanf("%s",w->name);
		while(p!=NULL){
			if(strcmp(w->name,p->name)==0){
				q->next=p->next;
				free (p);
				break;
			}
			
			else{
				q=q->next;
				p=p->next;
			}
		} 
	}
}
	int Worker::serch(stu *head){
		if(r==1){
			printf("请先输入链表,否则错误");
		}
		else{
		
		stu *p;
		char name[10];
		p=head->next;
		printf("请选择类别   1:课程性质|||| 除1以外为按查学分");
		int n;
		scanf("%d",&n);
		if(n==1){
			printf("请输入查找的课程名称\n");
		scanf("%s",name);
		while(p!=NULL){
			if(strcmp(name,p->name)==0){
			printf("课程名称\n");
			printf("%s",p->name);
			printf("课程性质\n");
			printf("%s",p->bianhao);
			printf("学分\n");
			printf("%d",p->all);
			printf("总学时\n");
			printf("%s",p->bumen);
			printf("授课学时\n");
			printf("%s",p->sex);
			printf("上机学时\n");
			printf("%s",p->csny);
			printf("开课学期\n");
			printf("%s",p->xueli);
			printf("课程编号\n");
			printf("%s",p->zhuzhi);
			printf("授课老师联系电话\n:");
			printf("%s",p->phone);
				break;
			}
			else{
				p=p->next; 
			}
		}
	}

	else{
		printf("请输入所查询课程的学分\n");
		int nn;
		scanf("%d",&nn); 
		while(p!=NULL){
			if(nn==p->all){
			printf("课程名称\n");
			printf("%s",p->name);
			printf("课程性质\n");
			printf("%s",p->bianhao);
			printf("学分\n");
			printf("%d",p->all);
			printf("总学时\n");
			printf("%s",p->bumen);
			printf("授课学时\n");
			printf("%s",p->sex);
			printf("上机学时\n");
			printf("%s",p->csny);
			printf("开课学期\n");
			printf("%s",p->xueli);
			printf("课程编号\n");
			printf("%s",p->zhuzhi);
			printf("授课老师联系电话\n:");
			printf("%s",p->phone);
				break;
			}
			else{
				p=p->next; 
			}
		}
	}
}
		}
	
	int Worker::gengxin(stu *head){
		if(r==1){
			printf("请先输入信息,否则错误");
		}
		else{
		char name[10];
		stu *q;
		q=head->next;
		printf("请输入课程的名称,用来更新课程信息\n");
		scanf("%s",name);
	while(q!=NULL){
		if(strcmp(name,q->name)==0){
			printf("请输入指令:1.课程名称 2.课程编号 3.学分 4.课程性质 5.总学时 6.授课学时 7.上机学时 8.开课学期 9.授课老师电话");
			int c;
			scanf("%d",&c);
			switch(c){
			case 1:
			scanf("%s",q->name);printf("已完成");break;
			case 2:
			scanf("%s",q->bianhao);printf("已完成");break;
			case 3:
			scanf("%d",&q->all);printf("已完成");break;
			case 4:
			scanf("%s",q->bumen);printf("已完成");break;
			case 5:
			scanf("%s",q->sex);printf("已完成");break;
			case 6:
			scanf("%s",q->csny);printf("已完成");break;
			case 7:
			scanf("%s",q->xueli);printf("已完成");break;
			case 8:
			scanf("%s",q->zhuzhi);printf("已完成");break;
			case 9:
			scanf("%s",q->phone);printf("已完成");break;
		}
		}
		else {
			q=q->next;
		}
	}
	}
}
	  
	  
	  
	int Worker::filesave(stu *head){
		int n;
		printf("请输入有几门课程,便于保存到text文件中");
		scanf("%d",&n);
		stu *p;
		p=head->next;
	FILE* fp;
	 fp=fopen("text.txt","wt");
	if(fp==NULL){
		printf("文件打开错误");
		exit(0);
	}
	char line[512];
	for(int i=0;i<n;i++){
	sprintf(line,"%s\t\t%s\t\t%d\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\n",p->name,p->bianhao,p->all,p->bumen,p->sex,p->csny,p->xueli,p->zhuzhi,p->phone);
	p=p->next;
	fputs(line,fp);
}
fclose(fp);
}
int Worker::loadfile(stu *head){
	
	FILE* fp;
	 fp=fopen("text.txt","rt");
	if(fp==NULL){
		printf("文件打开错误");
		exit(0);
	}
	int n;
	printf("几门课程\n");
	scanf("%d",&n);
	stu ss[1000];
	char line[1024];
	int i=0;
	while(i<n){
		char *ret=fgets(line,sizeof(line),fp);
		if(ret==NULL){
			break;
		}
		sscanf(line,"%s%s%d%s%s%s%s%s%s\n",ss[i].name,ss[i].bianhao,&ss[i].all,ss[i].bumen,ss[i].sex,ss[i].csny,ss[i].xueli,ss[i].zhuzhi,ss[i].phone);
		printf("%d\t",ss[i].all);
		i++;
	}
	fclose(fp);
	 ss[100]=ss[0];//zong 
    for(int i=0;i<n-1;i++){
   	for(int j=0;j<n-1-i;j++){
   		if(ss[j].all<ss[j+1].all){
   			ss[100]=ss[j];
   			ss[j]=ss[j+1];
   			ss[j+1]=ss[100];
		   }
	   }
   }
	printf("各课程学分降序排列如下\n");	
	for(int i=0;i<n;i++){
		printf("%s的学分为%d\n",ss[i].name,ss[i].all);
	}
	printf("\n");
   }
	


int Worker::menu() 
{
printf("\n");
printf("&&&&&&&&&&&& 作者:王山 &&&&&&&&&&&&&&");
printf("             职工信息管理            \n"); 
printf(" 1.录入课程信息");
printf(" 2.浏览课程信息,且保存到text文件中去。\n");
printf(" 3.查课程信息\n");
printf(" 4.删除课程信息\n");
printf(" 5.添加课程信息");
printf(" 6.修改课程信息\n");
printf(" 7.学分排序信息,从text文件中获取学分信息,在进行排序,进行输出\n");
printf(" 8.学生选课\n");
printf("&&&&&&&&&&&&     谢谢使用     &&&&&&&&&&&\n"); 
printf("\n");
printf("\n");
}

int Worker::zhuce()
{
   FILE* p=fopen("tex.txt","wt");
	if(p==NULL){
		printf("不存在");
	}
	printf("请先注册,先输入称呼 ,在输入密码::");
	char line[1024];//使用字符数组存储变量 
	char name[100];
	int mima;
	printf("请输入称呼");
	scanf("%s",name);
	printf("请输入密码(数字)");
	scanf("%d",&mima);
	sprintf(line,"%s\t\t%d",name,mima);
	fputs(line,p);
	fclose(p);
}

int Worker::denglu(){
	printf("如有遗忘,可在tex文件中查看注册的信息\n");
	char line[1024];
	char name[10];
	char name1[1024];
	int lee;
	int mima;
	FILE* fp=fopen("tex.txt","rt");
	if(fp==NULL){
		printf("不存在");
	}
	fgets(line,sizeof(line),fp);
	sscanf(line,"%s%d",name,&lee);
    fclose(fp); 
	plan:
		printf("请输入称呼:");
		scanf("%s",name1);
	printf("请输入密码\n");
	scanf("%d",&mima);
	if(lee==mima&&strcmp(name,name1)==0){
		printf("登录成功");
	}
	else{
		printf("请重新输入称呼和密码\n");
		goto plan;//跳转语句,用于循环判断。 
	}     
}
int Student::xuanke(){
	FILE* fp;
	FILE* p;
	 fp=fopen("text.txt","rt");
	if(fp==NULL){
		printf("文件打开错误\n");
		exit(0);
	}
	stu ss[1000];
	char line[1024];
	int i=0;
	int n=0;
	while(1){
		char *ret=fgets(line,sizeof(line),fp);
		if(ret==NULL){
			break;
		}
		sscanf(line,"%s%s%d%s%s%s%s%s%s\n",ss[i].name,ss[i].bianhao,&ss[i].all,ss[i].bumen,ss[i].sex,ss[i].csny,ss[i].xueli,ss[i].zhuzhi,ss[i].phone);
		printf("%s的学分为%d\n",ss[i].name,ss[i].all);
		i++;
		n++;
	}
	p=fopen("xuanke.txt","wt");
	if(p==NULL){
		printf("文件打开错误\n");
		exit(0);
	}
	char lin[1024];//间接存储课程信息 
	char namee[1024];
	char namm[1024];
	char naww[1024];
	int k=n;
	printf("请开始选课,输入课程名称即可,选三门\n");
	scanf("%s",namee);
	scanf("%s",namm);
	scanf("%s",naww);
	for(int j=0;j<k;j++){
		if(!strcmp(namee,ss[j].name)==0||!strcmp(namm,ss[j].name)==0||!strcmp(naww,ss[j].name)==0){
			fprintf(p,"%s\t\t%s\t\t%d\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\n",ss[j].name,ss[j].bianhao,ss[j].all,ss[j].bumen,ss[j].sex,ss[j].csny,ss[j].xueli,ss[j].zhuzhi,ss[j].phone);
            //printf("666\n"); 
			 //fputs(lin,p);
		}
	}
	printf("已完成 可去xuanke文档中查看\n"); 
	
}
int main(){
	Worker tom;
	Student st;
	printf("选择登录方式输入 1先注册后登录 2.直接登录::\n");
	int s;
	printf("请选择登录方式\n");   
	scanf("%d",&s);
	if (s==1){
	tom.zhuce();
	tom.denglu();
}
	//system("cls");
	else{
	tom.denglu();
}
	ws();
	int n,flag;
	tom.menu();
char a;
do
{
printf("请选择你需要操作的步骤(1--8):\n");//乱输入 n为0 
scanf("%d",&n);
while(getchar()!='\n'){printf("错误了\n");}
printf("请重新输入1-8\n");
scanf("%d",&n);
if(n>=1&&n<=7)
{
 flag=1;
 break;
}
else
{
     flag=0;
     printf("您输入有误,请重新选择\n");
}
}while(flag==0);

while(flag==1)
 
{
switch(n)
{
case 1:printf(" .......输入课程信息\n");printf("\n");tom.setline(head);tom.filesave(head);break;
case 2:printf(" .......浏览课程信息,且在text文件中查看\n");printf("\n");system("cls");tom.dayin(head);if(r==2){
	
tom.filesave(head);};break;
case 3:printf("........查询课程信息 学分或课程性质\n");printf("\n");tom.serch(head);break;
case 4:printf(" .......删除课程信息\n");printf("\n");tom.shanchu(head);break;
case 5:printf(" .......添加课程信息\n");printf("\n");tom.insert(head);break;
case 6:printf(" .......更新课程信息\n");printf("\n");tom.gengxin(head);break;
case 7:printf("........课程学分信息,从text文件中获取总工资信息\n");printf("\n");tom.loadfile(head);break;
case 8:printf(" .......学生选课\n");printf("\n");st.xuanke();break;
default :printf("输入错误,请重新输入指令");
}
getchar();
printf("\n");
printf("是否继续进行('y'进行,其余输入为退出程序):\n");
scanf("%c",&a);
if(a=='y')
{
flag=1;
tom.menu(); 
printf("请再次选择你需要操作的步骤(1--7):\n");
scanf("%d",&n);
printf("\n");
}
else
exit(0);
}
}
	
	void ws(){ 
	
printf("                 鸡你太美  \n");
printf("                鸡你实在太美\n");
printf("                鸡你是太美 \n");
printf("                  鸡你太美 \n");
printf("               实在是太美鸡你           \n");
printf("         鸡你 实在是太美鸡你 美         \n");
printf("       鸡你  实在是太美鸡美  太美       \n");
printf("     鸡你    实在是太美鸡美    太美       \n");
printf("    鸡你    实在是太美鸡美      太美    \n");
printf("  鸡你     鸡你实在是美太美    美蓝球球 \n");
printf("鸡 鸡     鸡你实在是太美      篮球篮球球\n");
printf("鸡         鸡你太美裆鸡太啊    蓝篮球   \n");
printf("            鸡你太美裆裆鸡美            \n");
printf("             鸡你美裆   裆鸡美          \n");
printf("              鸡太美     鸡太美         \n");
printf("               鸡美        鸡美         \n");
printf("               鸡美         鸡美        \n");
printf("                鸡美         鸡美       \n");
printf("                鸡太         鸡太       \n");
printf("               金 猴        金猴         \n");
printf("               皮 鞋        皮鞋金猴    \n");
printf("                金光        金光 大道   \n");
printf("               大道\n");
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值