C语言课设:学生选修课程系统设计

本文介绍了一个使用C语言设计的学生选修课程系统,该系统支持课程信息录入、浏览、按学分和课程性质查询等功能,并具有用户友好的界面及权限密码管理。然而,参考代码中存在权限密码功能错误和选课功能不完整的问题。
摘要由CSDN通过智能技术生成

学生选修课程系统设计

假定有 n 门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机
学时,学分,开课学期等信息,学生可按要求(如总学分不得少于 60)自由选课。试设计一选修课
程系统,使之能提供以下功能:
系统以菜单方式工作
课程信息录入功能(课程信息用文件保存)--输入
课程信息浏览功能--输出
查询功能:--算法
按学分查询
按课程性质查询
学生选修课程
有一个清晰美观界面来调用各个功能,界面设计以用户为中心,操作方便、美观大方。
要求设置有不同的操作权限密码。

参考代码1

权限密码功能有错

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h> 
#define SIZE_STU 10
#define SIZE_COU 10
#define SIZE_SEL 10
//函数声明部分 
void home(void);
void stu_operate(void);
void cou_operate(void);
void statistic(void);
void choose(void);
void delete_sel(int);
char menu1();
char zhuce();
char stuu();
char teaa();
void house();
//--学生信息部分: 
void input_stu(void);
void search_stu(void);
void search_stu_id(void);
void search_stu_name(void);
void show_stu(void);
void edit_stu(void);
void renew_stu(void); 
void delete_stu(void);
//--课程信息部分: 
void input_cou(void);
void search_cou(void);
void search_cou_id(void);
void search_cou_name(void);
void show_cou(void);
void edit_cou(void);
void renew_cou(void); 
void delete_cou(void);
 
/*学生信息结构体*/
struct student_info {
   
 char stu_ID[9];
 char stu_name[5];
 char sex[9];
 char age[9];
 char collage[9];
 char grade[9];
 char contact[9];
}stu[SIZE_STU];
 
/*课程信息结构体*/
struct course_info {
   
 char course_ID[9];
 char course_name[9];
 char property[9];
 char period[9];
 char credit[9];
 char time[9];
 int people;
}cou[SIZE_COU];
 
/*选课记录结构体*/
struct select {
   
 int s;//存放学生信息的数组下标 
 int c;//存放课程信息的数组下标 
}sel[SIZE_SEL]; 
 
//全局变量i,j,x分别是学生,课程,选课信息数组下标
int i = -1;
int j = -1;
int x = -1;

 struct Code				//权限 
{
   
	char stu[10];
	int tea; 
};

struct Code code[40];

char count1=0;
char count2=0;
char one=1;
char two=2;

int main(void){
   
 //进入欢迎界面 
 menu1();
 if(one>1)
 {
   
 	one = 1;
 	system("cls"); 
 	house();
 	
 }
 else if(two>2)
 {
   
 	two=2;
 	system("cls"); 
 	home();
 }
 return 0;
}

char menu1()
{
   

	system("cls");
	int num;
	while(1)
	{
   
		system("cls");
		printf("\t\t--------------------------\n\n");
		printf("\t\t1.学生登陆\t2.管理员登陆\n\n");
		printf("\t\t3.注册      4.退出系统\n\n");
		printf("\t\t--------------------------\n\n");
		scanf("%d",&num);
		char c,d;
		switch(num)
		{
   
			case 1:
				stuu();
				c=stuu();
				if(c==0)
				{
   
					c=2;
					one++;
					return -1;
				}
			
				break;
			case 2:
				teaa();
				d=teaa();
				if(d==0)
				{
   
					d=2;
					two++;
					return -1;
				}
			
				break;
			case 3:
				zhuce();
				break;
			case 4:
				exit(0);
				break;
		}	
	}
}

char stuu()//学生登陆
{
   
	char num[32];
	int i;
	printf("请输入您的密码\n"); 
	scanf("%s",num);
	if(strlen(num)<=10)
	{
   
		for(i=0;i<40;i++)
		{
   
			if(strcmp(code[i].stu,num)==0)
			{
   
				printf("登陆成功\n"); 
				_getch();
				return 0; 
			}
		}
	}
	printf("输入错误,请重新输入\n"); 
	return -1; 
} 

char teaa()//管理员登陆
{
   
	char m;
	int cod = 123456;
	for(m=0;m<40;m++)
	{
   
		code[m].tea=cod;	//设置唯一管理员密码 
	}	 
	int num;
	int i;
	printf("请输入您的密码\n"); 
	scanf("%d",&num);	
	for(i=0;i<40;i++)
	{
   
		if(code[i].tea==num)
		{
   
			printf("登陆成功\n"); 
			_getch();
			return 0; 
		}
	}
	printf("输入错误,请重新输入\n"); 
	return -1;
} 

char zhuce() //注册 
{
   	
	int i;
	char num[32];
	printf("请输入数字,不可超出10位\n");
	scanf("%s",num);
	if(strlen(num)<=10)
	{
   
		for(i=0;i<40;i++)
		{
   
			if(strcmp(code[i].stu,num)==0)
			{
   
				printf("数字已存在,请重新输入\n"); 
				getch();
				return -1; 
			}
		}
		printf("注册成功\n");
		strcpy(code[count2].stu,num);
		count2++; 
		_getch();
		return -1; 
	}
	printf("输入错误,请重新输入\n"); 
	_getch();	
	return -1; 
}

//欢迎界面 
void home(void) {
   
 printf("\n-------------------------欢迎进入选课系统!----------------------"); 
 int h;
 printf("\n\n      请选择你要进行的操作:");
 printf("\n\n        1.学生操作");
 printf("\n        2.课程操作");
 printf("\n        3.开始选课");
 printf("\n        4.选课统计");
 printf("\n        5.退出系统");
 printf("\n              ");
 printf("\n      请输入:");
 scanf("%d",&h);
 system("cls");
 switch(h){
   
  case 1:
   stu_operate();
   break;
  case 2:
   cou_operate(); 
   break;
  case 3:
   choose();
   break;
  case 4:
   statistic();
   break;
  default:
   system("cls");
   printf("BYE!");
   break;
 }
}
void house(void) {
   
 printf("\n-------------------------欢迎进入选课系统!----------------------"); 
 int h;
 printf("\n\n      请选择你要进行的操作:");
 printf("\n\n        1.学生操作");
 printf("\n        2.开始选课");
 printf("\n        3.选课统计");
 printf("\n        4.退出系统");
 printf("\n              ");
 printf("\n      请输入:");
 scanf("%d",&h);
 system("cls");
 switch(h){
   
  case 1:
   stu_operate();
   break;
   break;
  case 2:
   choose();
   break;
  case 3:
   statistic();
   break;
  default:
   system("cls");
   printf("BYE!");
   break;
 }
}

/*开始选课*/
void choose(void){
   
 char stu_id[10],cou_id[10];
 printf("\n-------------------------欢迎进入选课系统!----------------------"); 
 //输入选课学生信息 
 printf("\n\n     请输入选课人学号:");
 fflush(stdin);
 scanf("%s",stu_id);
 int h,flag = 0;
 for(h = 0;h <= i;h++){
   
  if(strcmp(stu[h].stu_ID,stu_id)==0){
   
   flag = 0;
   break;
  } else {
   
   flag = 1;
  }
 }
 if(flag||i==-1){
   
  printf("\n     不存在此学号\n");
  system("pause");
  system("cls");
  home();
 }
 //录入姓名信息 
 x++;
 sel[x].s = h; 
 //输入课程信息 
 printf("\n\n     请输入选修课程号:");
 fflush(stdin);
 scanf("%s",cou_id);
 flag = 0;
 for(h = 0;h <= j;h++){
   
  if(strcmp(cou[h].course_ID,cou_id)==0){
   
   flag = 0;
   break;
  } else {
   
   flag = 1;
  }
 }
 if(flag||j==-1){
   
  printf("\n     不存在此课程号\n");
  x--;
  system("pause");
  system("cls");
  home();
 }
 //录入课程信息
 sel[x].c = h;
 cou[h].people++; 
 printf("\n     录入成功!\n");
 system("pause");
 system("cls");
 home();
}
/*删除选课记录*/
void delete_sel(int q){
   //删除第q+1条记录 
/*注意!本函数没有将x减1,请在函数外手动减1(考虑外层函数循环的需要)*/
 int h;
 cou[sel[q].c].people--;
 for(h = q;q < x;h++){
   
  q++;
  sel[h].c = sel[q].c;
  sel[h].s = sel[q].s;
 }
  
}
//对学生记录进行操作
void stu_operate(void) {
   
 printf("\n-------------------------欢迎进入选课系统!----------------------"); 
 printf("\n\n     请选择你要对学生记录进行的操作:");
 printf("\n\n        1.添加");
 printf("\n        2.查询");
 printf("\n        3.显示");
 printf("\n        4.返回主页面");
 printf("\n              ");
 printf("\n      请输入:");
 int i;
 scanf("%d",&i);
 system("cls");
 switch(i){
   
  case 1://添加学生信息 
   input_stu();
   break;
  case 2://查询学生信息 
   search_stu(); 
   break;
  case 3://显示所有学生信息
   show_stu(); 
   break;
  case 4:
   home();
   break; 
 }
}
//对课程记录进行操作 
void cou_operate(void) {
   
 printf("\n-------------------------欢迎进入选课系统!----------------------"); 
 printf("\n\n     请选择你要对课程记录进行的操作:");
 printf("\n\n        1.添加");
 printf("\n        2.查询");
 printf("\n        3.显示");
 printf("\n        4.返回主页面");
 printf("\n              ");
 printf("\n      请输入:");
 int i;
 scanf("%d",&i);
 system("cls");
 switch(i){
   
  case 1:
   input_cou();
   break;
  case 2:
   search_cou();
   break;
  case 3:
   show_cou();
  case 4:
   home();
   break; 
 }
}
//选课信息统计记录
void statistic(void){
   
 printf("\n-------------------------欢迎进入选课系统!----------------------"); 
 printf("\n\n      共有学生信息:%d 条",i+1); 
 printf("\n      共有课程信息:%d 条",j+1);
 if(x == -1){
   
  printf("\n      选课记录:0 条");
  printf("\n\n      "); 
  system("pause");
  system("cls");
  home();
 } else {
   
  printf("\n\n      选课记录 %d 条:",x+1);
  int m;
  for(m = 0;m <= x;m++){
   
   printf("\n      ================");
   printf("\n      第%d条",m+1);
   printf("\n      学生学号:%s",stu[sel[m].s].stu_ID);
   printf("\n      学生姓名:%s",stu[sel[m].s].stu_name);
   printf("\n      课程号:%s",cou[sel[m].c].course_ID);
   printf("\n      课程名:%s",cou[sel[m].c].course_name); 
  }
  printf("\n\n   "); 
  system("pause");
  system("cls");
  home();
 }
  
}
 
 
//--------------------------------------学生信息插入--------------------------------------
void input_stu(void){
   
 char flag;
 FILE * fp;
 //--判断文件是否为空 
 fp = fopen("student.txt","r+");
 flag = fgetc(fp);
 if(flag==EOF){
   
  fprintf(fp,"学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式\n");
 }
 fclose(fp);
 //-- 
 fp = fopen("student.txt","a+");
 if(fp == NULL){
   
  printf("打开文件失败!");
  system("cls");
  stu_operate();
 }
 printf("学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式\n");
 while(1){
   
  i++;
  scanf("%s %s %s %s %s %s %s",&stu[i].stu_ID,&stu[i].stu_name,&stu[i].sex,&stu[i].age,&stu[i].collage,&stu[i].grade,&stu[i].contact);
  //--数据查重
  int h; 
  for(h = 0;h < i;h++){
   
   if(i == 0) break;//第一条数据不需要查重 
   if (strcmp(stu[h].stu_ID,stu[i].stu_ID)==0) {
   
    printf("该学号已存在,请重新输入!\n");
    scanf("\n%s %s %s %s %s %s %s",&stu[i].stu_ID,&stu[i].stu_name,&stu[i].sex,&stu[i].age,&stu[i].collage,&stu[i].grade,&stu[i].contact);
    h = -1;
   }
  }
  //-- 
  fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\n",stu[i].stu_ID,stu[i].stu_name,stu[i].sex,stu[i].age,stu[i].collage,stu[i].grade,stu[i].contact);
  printf("\n录入成功,继续录入输入y,返回上一级请按任意键:");
  fflush(stdin); 
  scanf("%c",&flag); 
  fclose(fp);
  if(flag!='y'&&'Y') break;
  fp = fopen("student.txt","a");
 }
 renew_stu();
 system("cls");
 stu_operate();
} 
/*查询学生信息*/
void search_stu(void){
   
 system("cls");
 printf("\n请选择查询方式:");
 printf("\n 1.学号查询");
 printf("\n 2.姓名查询");
 printf("\n请选择:");
 int h;
 scanf(" %d",&h);
 switch(h){
   
  case 1:
   search_stu_id();
   break;
  case 2:
   search_stu_name();
   break;
    
 } 
}
/*学号查询*/
void search_stu_id(void){
   
 system("cls");
 char id[9];
 printf("\n输入学生的学号:");
 fflush(stdin); 
 scanf("%s",id);
 int h;
 for(h = 0;h <= i;h++){
   
  if(strcmp(stu[h].stu_ID,id)==0){
   
   system("cls");
   printf("查找成功!"); 
   printf("\n\n\t学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式");
   printf("\n\t-----------------------------------------------------------------"); 
   printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age,stu[h].collage,stu[h].grade,stu[h].contact);
   system("pause");
   system("cls");
   stu_operate
  • 16
    点赞
  • 175
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值