代码部分有误请自行修改
学生选修课程系统设计
假定有 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