C语言课设:学生选修课程系统设计
发布时间
阅读量:
阅读量
根据代码和描述的问题,“不能删除已选课程”通常是由于以下原因导致的:
删除操作中的计数问题:
- 系统中使用count变量来记录学生数量,并根据这个值进行操作。但在实际操作中发现count并不能准确反映当前可删除课程的数量。
- 在delete()函数中修改数据后未正确更新count变量。
文件操作的安全性:- 在保存和读取文件的操作中没有严格的错误检查机制。
- 如果文件读写失败(如文件不存在),程序不会报错并可能导致死机。
输入输出处理不规范:- 在某些情况下(如从控制台读取输入时),如果用户按了其他键(如回车键),会导致程序崩溃。
- 没有对用户的输入进行有效性检查。
以下改进建议:
增加对计数器的正确更新:
c void delete() // 删除课程 { int i,j; char del_name[10]; printf("请输入需要删除的课程名称:\n"); scanf("%s",del_name); printf("\n\n"); // 先统计当前学生数 int current_count = count; for(i=0;i<count;i++) { if((strcmp(stu[i].name,del_name)==0)) { for(j=i;j<count;j++) { stu[j]=stu[j+1]; } count--; // 更新计数器 printf("删除成功!\n"); break; } } if(i >= current_count) { printf("对不起!您的学号不在范围内。\n"); goto _endProgram; } printf("请按任意键返回"); }
增加文件操作的安全性:
c void save() // 文件保存 { FILE * fp; fp = fopen("Stu_list","wb"); if(fp == NULL) { printf("不能打开文件\n"); goto _endProgram; } for(i=0;i<count;i++) { if(fwrite(&stu[i],sizeof(struct Student),1,fp)!=1) printf("保存出错\n"); } fclose(fp); printf("\n\n"); printf(">><< 保存成功!!! \n\n"); fflush(stdin); printf("\请按任意键返回"); _getch(); }
增加输入输出验证:
c int k; printf("\n\t确认退出吗?\n\n"); printf("\t1,确定\n"); printf("\t2,取消\n\n"); scanf("%d",&k); if(k==1) { exit(0); }
修改main函数中的调用方式:
`c
int main()
{
int k=0;
while(1)
{
ClearConsolation();
printf("\["+chr(473)<<"your system's character set<<chr(473)][+chr(577)<<" your language choice <<chr(577)[+chr(473)]"\n"
+""86)\n"
+"*}\n"
+"Menu: \n"
"*}\n"
+
printf("+Press '+' to add a student.\n")
代码部分有误请自行修改
-
- 学生选修课程系统设计
-
- 参考代码1
- 参考代码2
- 参考代码3
学生选修课程系统设计
假设有n门课程
参考代码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();
}
}
system("cls");
printf("没有此学号!\n");
system("pause");
system("cls");
stu_operate();
}
/*姓名查询*/
void search_stu_name(void){
system("cls");
char name[9];
printf("\n输入学生的姓名:");
fflush(stdin);
scanf("%s",name);
int h;
for(h = 0;h <= i;h++){
if(strcmp(stu[h].stu_name,name)==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();
}
}
system("cls");
printf("没有此姓名!");
system("pause");
system("cls");
stu_operate();
}
/*显示所有学生信息*/
void show_stu(void){
int h;
if(i == -1){
printf("\n还没有录入信息!\n");
system("pause");
system("cls");
stu_operate();
}
system("cls");
printf("\n\n\t学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式");
printf("\n\t---------------------------------------------------------");
for(h = 0;h <= i;h++){
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);
}
//
fflush(stdin);
printf("\n\t1.修改");
printf("\n\t2.删除");
printf("\n\t3.返回");
printf("\n\n 选择要进行的操作:");
int flag;
fflush(stdin);
scanf("%d",&flag);
switch(flag){
case 1:
edit_stu();
break;
case 2:
delete_stu();
break;
default:
system("cls");
stu_operate();
break;
}
}
/*编辑学生信息*/
void edit_stu(void){
printf("\n输入需要编辑的学生的学号:");
char id[10];
getchar();
scanf("%s",id);
int h;
for(h = 0;h <= i;h++){
if(strcmp(stu[h].stu_ID,id)==0){//找到需要编辑的行
system("cls");
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);
printf("\n这是修改前的数据,请依次输入修改值:\n\t");
fflush(stdin);
scanf("%s %s %s %s %s %s %s",&stu[h].stu_ID,&stu[h].stu_name,&stu[h].sex,&stu[h].age,&stu[h].collage,&stu[h].grade,&stu[h].contact);
int k;
for(k = 0;k <= i;k++){
if(strcmp(stu[k].stu_ID,stu[h].stu_ID)==0){
if(k==h){
continue;
} else {//学号不唯一
printf("\n此学号已存在!重新输入学号:");
fflush(stdin);
scanf("%s",&stu[h].stu_ID);
k = -1;
}
}
}
/*将修改信息写入文件*/
//思想:将原文件重新写入一遍
renew_stu();
system("cls");
printf("修改成功!\n");
system("pause");
system("cls");
stu_operate();
}
}
printf("\n此学号不存在!\n");
system("pause");
system("cls");
stu_operate();
}
/*删除学生信息*/
void delete_stu(void){
printf("\n输入需要编辑的学生的学号:");
char id[10];
getchar();
scanf("%s",id);
int h;
for(h = 0;h <= i;h++){
if(strcmp(stu[h].stu_ID,id)==0){//找到需要编辑的行
system("cls");
//检查他/她是否选课了
int a;
for(a = 0;a <= x;a++){
if(h==sel[a].s){//选课了则将对应课程记录减1,以及选课数组减1
delete_sel(a);
a = -1;
x--;
continue;
}
}
//如果只有一条记录
if(i==0){
i = -1;
renew_stu();
printf("修改成功!\n");
system("pause");
system("cls");
stu_operate();
}
int k;
for(k = h+1;k <= i;k++,h++){//将数组直接向前移动
strcpy(stu[h].stu_ID,stu[k].stu_ID);
strcpy(stu[h].stu_name,stu[k].stu_name);
strcpy(stu[h].sex,stu[k].sex);
strcpy(stu[h].grade,stu[k].grade);
strcpy(stu[h].contact,stu[k].contact);
strcpy(stu[h].collage,stu[k].collage);
strcpy(stu[h].age,stu[k].age);
}
/*将修改信息写入文件*/
//思想:将原文件重新写入一遍
renew_stu();
i--;
system("cls");
printf("修改成功!\n");
system("pause");
system("cls");
stu_operate();
}
}
printf("\n此学号不存在!\n");
system("pause");
system("cls");
stu_operate();
}
//--------------------------------------课程信息插入--------------------------------------
void input_cou(void){
char flag;
FILE * fp;
//--判断文件是否为空
fp = fopen("course.txt","r+");
flag = fgetc(fp);
if(flag==EOF){
fprintf(fp,"代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数\n");
}
fclose(fp);
//--
fp = fopen("course.txt","a+");
if(fp == NULL){
printf("打开文件失败!");
system("cls");
cou_operate();
}
printf("代码\t名称\t性质\t总学时\t学分\t开课学期\n");
while(1){
j++;
scanf("%s %s %s %s %s %s",&cou[j].course_ID,&cou[j].course_name,&cou[j].property,&cou[j].period,&cou[j].credit,&cou[j].time);
//--数据查重
int h;
for(h = 0;h < j;h++){
if(j == 0) break;//第一条数据不需要查重
if (strcmp(cou[h].course_ID,cou[j].course_ID)==0) {
printf("该课程号已存在,请重新输入!\n");
scanf("\n%s %s %s %s %s %s",&cou[j].course_ID,&cou[j].course_name,&cou[j].property,&cou[j].period,&cou[j].credit,&cou[j].time);
h = -1;
}
}
//--
fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t\t%d\n",cou[j].course_ID,cou[j].course_name,cou[j].property,cou[j].period,cou[j].credit,cou[j].time,cou[j].people);
printf("\n录入成功,继续录入输入y,返回上一级请按任意键:");
fflush(stdin);
scanf("%c",&flag);
fclose(fp);
if(flag!='y'&&'Y') break;
fp = fopen("course.txt","a");
}
renew_cou();
system("cls");
cou_operate();
}
/*查询课程信息*/
void search_cou(void){
system("cls");
printf("\n请选择查询方式:");
printf("\n 1.课程号查询");
printf("\n 2.课程名查询");
printf("\n请选择:");
int h;
scanf(" %d",&h);
switch(h){
case 1:
search_cou_id();
break;
case 2:
search_cou_name();
break;
}
}
/*课程号查询*/
void search_cou_id(void){
system("cls");
char id[9];
printf("\n输入课程号:");
fflush(stdin);
scanf("%s",id);
int h;
for(h = 0;h <= j;h++){
if(strcmp(cou[h].course_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\t%d\n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time,cou[h].people);
system("pause");
system("cls");
cou_operate();
}
}
system("cls");
printf("没有此课程号!\n");
system("pause");
system("cls");
cou_operate();
}
/*课程名查询*/
void search_cou_name(void){
system("cls");
char name[9];
printf("\n输入课程名:");
fflush(stdin);
scanf("%s",name);
int h;
for(h = 0;h <= j;h++){
if(strcmp(cou[h].course_name,name)==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\t%d\n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time,cou[h].people);
system("pause");
system("cls");
cou_operate();
}
}
system("cls");
printf("没有此课程名!");
system("pause");
system("cls");
cou_operate();
}
/*显示所有课程信息*/
void show_cou(void){
int h;
if(j == -1){
printf("\n还没有录入信息!\n");
system("pause");
system("cls");
cou_operate();
}
system("cls");
printf("\n\n\t代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数");
printf("\n\t-------------------------------------------------------------");
for(h = 0;h <= j;h++){
printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\t\t%d\n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time,cou[h].people);
}
//
fflush(stdin);
printf("\n\t1.修改");
printf("\n\t2.删除");
printf("\n\t3.返回");
printf("\n\n 选择要进行的操作:");
int flag;
fflush(stdin);
scanf("%d",&flag);
switch(flag){
case 1:
edit_cou();
break;
case 2:
delete_cou();
break;
default:
system("cls");
cou_operate();
break;
}
}
/*编辑课程信息*/
void edit_cou(void){
printf("\n输入需要编辑的课程号:");
char id[10];
getchar();
scanf("%s",id);
int h;
for(h = 0;h <= j;h++){
if(strcmp(cou[h].course_ID,id)==0){//找到需要编辑的行
system("cls");
printf("\n\n\t代码\t名称\t性质\t总学时\t学分\t开课学期");
printf("\n\t-------------------------------------------------------------");
printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time);
printf("\n这是修改前的数据,请依次输入修改值:\n\t");
fflush(stdin);
scanf("%s %s %s %s %s %s",&cou[h].course_ID,&cou[h].course_name,&cou[h].property,&cou[h].period,&cou[h].credit,&cou[h].time);
int k;
for(k = 0;k <= j;k++){
if(strcmp(cou[k].course_ID,cou[h].course_ID)==0){
if(k==h){
continue;
} else {//课程号不唯一
printf("\n此课程号已存在,重新输入:");
fflush(stdin);
scanf("%s",&cou[h].course_ID);
k = -1;
}
}
}
/*将修改信息写入文件*/
//思想:将原文件重新写入一遍
renew_cou();
system("cls");
printf("修改成功!\n");
system("pause");
system("cls");
cou_operate();
}
}
printf("\n此课程号不存在!\n");
system("pause");
system("cls");
cou_operate();
}
/*删除课程信息*/
void delete_cou(void){
printf("\n输入需要编辑的课程号:");
char id[10];
getchar();
scanf("%s",id);
int h;
for(h = 0;h <= j;h++){
if(strcmp(cou[h].course_ID,id)==0){//找到需要编辑的行
system("cls");
//如果只有一条记录
if(j==0){
j = -1;
renew_cou();
printf("修改成功!\n");
system("pause");
system("cls");
cou_operate();
}
//查看是否有人选课
if(cou[h].people!=0){//有人选课时
int a;
for(a = 0;a <= x;a++){
if(sel[a].c == h){
delete_sel(a);
a = -1;
x--;
continue;
}
}
}
int k;
for(k = h+1;k <= j;k++,h++){//将数组直接向前移动
strcpy(cou[h].course_ID,cou[k].course_ID);
strcpy(cou[h].course_name,cou[k].course_name);
strcpy(cou[h].property,cou[k].property);
strcpy(cou[h].period,cou[k].period);
strcpy(cou[h].credit,cou[k].credit);
strcpy(cou[h].time,cou[k].time);
}
/*将修改信息写入文件*/
//思想:将原文件重新写入一遍
renew_cou();
j--;
system("cls");
printf("修改成功!\n");
system("pause");
system("cls");
cou_operate();
}
}
printf("\n此课程号不存在!\n");
system("pause");
system("cls");
cou_operate();
}
//--功能函数
/*更新系统数据至文件*/
void renew_stu(void){
FILE * fp;
fp = fopen("student.txt","w+");
if(fp == NULL){
printf("\n打开文件失败,无法保存至文件。\n");
fclose(fp);
return ;
}
fprintf(fp,"学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式\n");
if(i == -1){
fclose(fp);
return;
}
int h;
for(h = 0;h <= i;h++){
fprintf(fp,"%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);
}
fclose(fp);
}
void renew_cou(void){
FILE * fp;
fp = fopen("course.txt","w+");
if(fp == NULL){
printf("\n打开文件失败,无法保存至文件。\n");
fclose(fp);
return ;
}
fprintf(fp,"代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数\n");
if(j == -1){
fclose(fp);
return;
}
int h;
for(h = 0;h <= j;h++){
fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t\t%s\n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time,cou[h].people); }
fclose(fp);
}
参考代码2
权限密码有错,选课功能没有完善
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
struct Student
{
int num; //课程编号
char name[32]; //名称
char nat[32]; //性质
int time1; //总学时
int time2; //授课学时
int time3; //实验学时
int fen; //学分
int cho; //选课人数
};
struct Student wor[40];
int count=0,i=0; //全局变量,当读取时,i,count已有值,可再次进行录入功能时继续添加信息,且原有信息不被覆盖
struct Code //权限
{
char stu[10];
char tea[10];
};
struct Code code[40];
char count1=0;
char count2=0;
char one=1;
char two=2;
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 num[32];
int i;
printf("请输入您的密码\n");
scanf("%s",num);
if(strlen(num)<=10)
{
for(i=0;i<40;i++)
{
if(strcmp(code[i].tea,num)==0)
{
printf("登陆成功\n");
_getch();
return 0;
}
}
}
printf("输入错误,请重新输入\n");
return -1;
}
char zhuce() //注册
{
int i,j;
printf("管理员注册请按1,学生注册请按2!\n");
scanf("%d",&j);
if(j==1)
{
char num[32];
printf("请输入数字,不可超出10位\n");
scanf("%s",num);
if(strlen(num)<=10)
{
for(i=0;i<40;i++)
{
if(strcmp(code[i].tea,num)==0)
{
printf("数字已存在,请重新输入\n");
_getch();
return -1;
}
printf("注册成功\n");
strcpy(code[count1].tea,num);
count1++;
_getch();
return -1;
}
}
printf("输入错误,请重新输入\n");
_getch();
return -1;
}
else if(j==2)
{
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;
}
printf("输入错误,请重新输入\n");
_getch();
return -1;
}
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;
}
}
}
void input()
{
for(;i<40;i++)
{
printf("\n");
printf("**************** 数据录入 ***********\n");
printf("\n\n");
printf("请输入课程编号:");
scanf("%d",&wor[i].num);
fflush(stdin);
if(wor[i].num==0) break; //当输入的课程编号为“0”时,录入结束
printf("请输入课程名称:");
scanf("%s",&wor[i].name);
printf("请输入课程性质:");
scanf("%s",&wor[i].nat);
printf("请输入总学时:");
scanf("%d",&wor[i].time1);
printf("请输入授课学时:");
scanf("%d",&wor[i].time2);
printf("请输入实验学时:");
scanf("%d",&wor[i].time3);
printf("请输入课程学分:");
scanf("%d",&wor[i].fen);
count++; //记录录入信息的个数
system("cls"); //清屏
}
}
void brouse()//浏览课程
{
int i;
printf("┏━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┓\n");
printf(" 课程编号 课程名称 课程性质 总学时 授课学时 实验学时 学分 选课人数 \n");
printf("┗━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┛\n");
for(i=0;i<count;i++)
{
printf(" %d %s %s %d %d %d %d %d\n",wor[i].num,wor[i].name,wor[i].nat,wor[i].time1,wor[i].time2,wor[i].time3,wor[i].fen,wor[i].cho);
printf("┗━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┛\n");
}
printf("请按任意键返回");
_getch();
}
void search()//信息查询
{
void num();
void name();
int i;
printf("\n\n");
printf("请选择查询方式:\n");
printf("\n");
printf("┏━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃ 1.按课程学分查询 ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("┃ 2.按课程性质查询 ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("┃ 4.返回系统页面 ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\n");
printf("请输入您的选择,小系为您服务:\n");
scanf("%d",&i);
system("cls");
switch(i)
{
case 1: num();break;
case 2: name();break;
case 3:break;
}
}
void num()//学分查询
{
int i,num;
printf("请输入所查询的课程学分:\n");
scanf("%d",&num);
for(i=0;i<count;i++)
if(wor[i].num==num)
{
printf("查询结果如下:\n");
printf("┏━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┓\n");
printf(" 课程编号 课程名称 课程性质 总学时 授课学时 实验学时 学分 \n");
printf("┗━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┛\n");
printf(" %d %s %s %d %d %d %d\n",wor[i].num,wor[i].name,wor[i].nat,wor[i].time1,wor[i].time2,wor[i].time3,wor[i].fen);
printf("┗━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┛\n");
break;
}
if(i>=count)
{
printf("*******************************************\n");
printf("********* 很抱歉,没有查到 *********\n");
printf("*******************************************\n");
}
printf("请按任意键返回");
_getch();
}
void name()//名称查询
{
int i;
char name[10];
printf("请输入所查课程名称:\n");
scanf("%s",name);
for(i=0;i<count;i++)
if(strcmp(wor[i].name,name)==0)
{
printf("查询结果如下:\n");
printf("┏━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┓\n");
printf(" 课程编号 课程名称 课程性质 总学时 授课学时 实验学时 学分 \n");
printf("┗━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┛\n");
printf(" %d %s %s %d %d %d %d\n",wor[i].num,wor[i].name,wor[i].nat,wor[i].time1,wor[i].time2,wor[i].time3,wor[i].fen);
printf("┗━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┛\n");
break;
}
if(i>=count)
{
printf("*******************************************\n");
printf("********* 很抱歉,没有该课程的信息 *********\n");
printf("*******************************************\n");
}
printf("请按任意键返回");
_getch();
}
char choice() //选课
{
int i;
char name[10];
printf("请输入所选课程名称:\n");
scanf("%s",name);
for(i=0;i<count;i++)
if(strcmp(wor[i].name,name)==0)
{
printf("*******************************************\n");
printf("********* 恭喜,选课成功 *********\n");
printf("*******************************************\n");
wor[i].cho++;
_getch();
return -1;
}
if(i>=count)
{
printf("*******************************************\n");
printf("********* 很抱歉,没有该课程的信息 *********\n");
printf("*******************************************\n");
}
printf("请按任意键返回");
_getch();
}
void revise()//课程信息修改。
{
void renum();
void re_name();
void renat();
void retime1();
void retime2();
void retime3();
void refen();
int j;
printf("选择修改内容:\n");
printf("┏━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃ 1.课程编号修改 ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("┃ 2.课程名称修改 ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("┃ 3.课程性质修改 ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("┃ 4.总学时修改 ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("┃ 5.授课学时修改 ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("┃ 6.实验学时修改 ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("┃ 7.学分修改 ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("┃ 8.返回管理系统页面 ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("请输入您的选择,小系为您服务:\n");
scanf("%d",&j);
system("cls");
switch(j)
{
case 1: renum();break;
case 2: re_name();break;
case 3: renat();break;
case 4: retime1();break;
case 5: retime2();break;
case 6: retime3();break;
case 7: refen();break;
case 8:break;
}
}
void renum()//课程编号修改
{
char name[32];
int i,t;
printf("请输入您要查询的课程名称:");
scanf("%s",name);
printf("\n\n");
for(i=0;i<count;i++)
if(strcmp(wor[i].name,name)==0)
{
printf("本课程初始编号是:%d\n",wor[i].num);
printf("修改后的之后的编号是:");
scanf("%d",&t);
wor[i].num=t;
printf("****************************************************\n");
printf("\n");
printf("****** o(≧v≦)o~~好棒!!修改成功!!! ******\n");
printf("\n");
printf("****************************************************\n");
printf("以下是修改之后的信息\n");
printf("┏━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┓\n");
printf(" 课程编号 课程名称 课程性质 总学时 授课学时 实验学时 学分 \n");
printf("┗━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┛\n");
printf(" %d %s %s %d %d %d %d\n",wor[i].num,wor[i].name,wor[i].nat,wor[i].time1,wor[i].time2,wor[i].time3,wor[i].fen);
printf("┗━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┛\n");
break;
}
if(i>=count)
{
printf("*******************************************\n");
printf("********* 很抱歉,没有该课程的信息 *********\n");
printf("*******************************************\n");
}
printf("请按任意键返回");
_getch();
}
void re_name()//名称修改
{
char name[32];
int i;
char t[32];
printf("请输入您要查询的课程名称:");
scanf("%s",name);
printf("\n");
for(i=0;i<count;i++)
if(strcmp(wor[i].name,name)==0)
{
printf("本课程初始名称是:%d\n",wor[i].name);
printf("修改后的之后的名称是:");
scanf("%s",t);
strcpy(wor[i].name,t);
printf("****************************************************\n");
printf("\n");
printf("****** o(≧v≦)o~~好棒!!修改成功!!! ******\n");
printf("\n");
printf("****************************************************\n");
printf("以下是修改之后的课程信息\n");
printf("┏━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┓\n");
printf(" 课程编号 课程名称 课程性质 总学时 授课学时 实验学时 学分 \n");
printf("┗━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┛\n");
printf(" %d %s %s %d %d %d %d\n",wor[i].num,wor[i].name,wor[i].nat,wor[i].time1,wor[i].time2,wor[i].time3,wor[i].fen);
printf("┗━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┛\n");
break;
}
if(i>=count)
{
printf("*******************************************\n");
printf("********* 很抱歉,没有该课程的信息 *********\n");
printf("*******************************************\n");
}
printf("请按任意键返回");
_getch();
}
void renat()//课程性质修改
{
char name[32];
int i;
char nat[32];
printf("请输入您要查询的课程名称:");
scanf("%s",name);
printf("\n\n");
for(i=0;i<count;i++)
if(strcmp(wor[i].name,name)==0)
{
printf("课程初始性质是:%d\n",wor[i].nat);
printf("修改后的之后的性质是:");
scanf("%s",nat);
strcpy(wor[i].nat,nat);
printf("****************************************************\n");
printf("\n");
printf("****** o(≧v≦)o~~好棒!!修改成功!!! ******\n");
printf("\n");
printf("****************************************************\n");
printf("以下是修改之后的课程信息\n");
printf("┏━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┓\n");
printf(" 课程编号 课程名称 课程性质 总学时 授课学时 实验学时 学分 \n");
printf("┗━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┛\n");
printf(" %d %s %s %d %d %d %d\n",wor[i].num,wor[i].name,wor[i].nat,wor[i].time1,wor[i].time2,wor[i].time3,wor[i].fen);
printf("┗━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┛\n");
break;
}
if(i>=count)
{
printf("*******************************************\n");
printf("********* 很抱歉,没有该课程的信息 *********\n");
printf("*******************************************\n");
}
printf("请按任意键返回");
_getch();
}
void retime1()//总学时修改
{
int t,i;
char name[32];
printf("请输入您要查询的课程名称:");
scanf("%s",name);
printf("\n\n");
for(i=0;i<count;i++)
if(strcmp(wor[i].name,name)==0)
{
printf("本课程初始总学时是:%d\n",wor[i].time1);
printf("修改后的总学时是:");
scanf("%d",&t);
wor[i].time1=t;
printf("****************************************************\n");
printf("\n");
printf("****** o(≧v≦)o~~好棒!!修改成功!!! ******\n");
printf("\n");
printf("****************************************************\n");
printf("以下是修改之后的课程信息\n");
printf("┏━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┓\n");
printf(" 课程编号 课程名称 课程性质 总学时 授课学时 实验学时 学分 \n");
printf("┗━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┛\n");
printf(" %d %s %s %d %d %d %d\n",wor[i].num,wor[i].name,wor[i].nat,wor[i].time1,wor[i].time2,wor[i].time3,wor[i].fen);
printf("┗━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┛\n");
break;
}
if(i>=count)
{
printf("*******************************************\n");
printf("********* 很抱歉,没有该课程的信息 *********\n");
printf("*******************************************\n");
}
printf("请按任意键返回");
_getch();
}
void retime2()//授课学时修改
{
int time2;
char name[32];
int i;
printf("请输入您要修改的课程的名称:");
scanf("%s",name);
printf("\n\n");
for(i=0;i<count;i++)
if(strcmp(wor[i].name,name)==0)
{
printf("本课程初始授课学时是:%s\n",wor[i].time2);
printf("修改后的之后的授课学时是:");
scanf("%d",&time2);
wor[i].time2=time2;
printf("****************************************************\n");
printf("\n");
printf("****** o(≧v≦)o~~好棒!!修改成功!!! ******\n");
printf("\n");
printf("****************************************************\n");
printf("以下是修改之后的课程信息\n");
printf("┏━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┓\n");
printf(" 课程编号 课程名称 课程性质 总学时 授课学时 实验学时 学分 \n");
printf("┗━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┛\n");
printf(" %d %s %s %d %d %d %d\n",wor[i].num,wor[i].name,wor[i].nat,wor[i].time1,wor[i].time2,wor[i].time3,wor[i].fen);
printf("┗━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┛\n");
break;
}
if(i>=count)
{
printf("*******************************************\n");
printf("********* 很抱歉,没有该课程的信息 *********\n");
printf("*******************************************\n");
}
printf("请按任意键返回");
_getch();
}
void retime3()//实验学时修改
{
int time3;
char name[32];
int i;
printf("请输入您要修改的课程的名称是:");
scanf("%s",name);
printf("\n\n");
for(i=0;i<count;i++)
if(strcmp(wor[i].name,name)==0)
{
printf("本课程的初始实验学时是:%d\n",wor[i].time3);
printf("修改后的实验学时是:");
scanf("%d",&time3);
wor[i].time3=time3;
printf("****************************************************\n");
printf("\n");
printf("****** o(≧v≦)o~~好棒!!修改成功!!! ******\n");
printf("\n");
printf("****************************************************\n");
printf("以下是修改之后的课程信息\n");
printf("┏━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┓\n");
printf(" 课程编号 课程名称 课程性质 总学时 授课学时 实验学时 学分 \n");
printf("┗━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┛\n");
printf(" %d %s %s %d %d %d %d\n",wor[i].num,wor[i].name,wor[i].nat,wor[i].time1,wor[i].time2,wor[i].time3,wor[i].fen);
printf("┗━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┛\n");
break;
}
if(i>=count)
{
printf("*******************************************\n");
printf("********* 很抱歉,没有该课程的信息 *********\n");
printf("*******************************************\n");
}
printf("请按任意键返回");
_getch();
}
void refen()//课程学分修改
{
int fen;
char name[32];
int i;
printf("请输入您要修改的课程名称是:");
scanf("%s",name);
printf("\n\n");
for(i=0;i<count;i++)
if(strcmp(wor[i].name,name)==0)
{
printf("本课程初始课程学分是:%s\n",wor[i].fen);
printf("修改后的课程学分是:");
scanf("%d",&fen);
wor[i].fen=fen;
printf("****************************************************\n");
printf("\n");
printf("****** o(≧v≦)o~~好棒!!修改成功!!! ******\n");
printf("\n");
printf("以下是修改之后的课程信息\n");
printf("****************************************************\n");
printf("┏━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┓\n");
printf(" 课程编号 课程名称 课程性质 总学时 授课学时 实验学时 学分 \n");
printf("┗━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┛\n");
printf(" %d %s %s %d %d %d %d\n",wor[i].num,wor[i].name,wor[i].nat,wor[i].time1,wor[i].time2,wor[i].time3,wor[i].fen);
printf("┗━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┃━━━━┛\n");
break;
}
if(i>=count)
{
printf("*******************************************\n");
printf("********* 很抱歉,没有该课程的信息 *********\n");
printf("*******************************************\n");
}
printf("请按任意键返回");
_getch();
}
void dele()//课程删除
{
int i,j;
char del_name[10];
printf("请输入需要删除的课程名称:\n");
scanf("%s",del_name);
printf("\n\n");
for(i=0;i<count;i++)
{
if((strcmp(wor[i].name,del_name)==0))
{
for(j=i;j<count;j++)
{
wor[j]=wor[j+1];
}
printf("****************************************************\n");
printf("\n");
printf(" o(≧v≦)o~~好棒!!删除成功!!! \n");
printf(" 您可以返回菜单在浏览功能项中查看删除结果!!! \n");
printf("\n");
printf("****************************************************\n");
count--;
}
}
printf("请按任意键返回");
_getch();
}
void save()//文件建立及保存
{
FILE * fp;
int i;
if((fp=fopen("Stu_list","wb"))==NULL)
{
printf("不能打开文件\n");
return;
}
for(i=0;i<count;i++)
{
if(fwrite(&wor[i],sizeof(struct Student),1,fp)!=1)
printf("文件输出错误\n");
}
fclose(fp);
printf("\n\n");
printf("***********************************************\n");
printf("\n");
printf("****** o(≧v≦)o~~好棒!!保存成功!!! ******\n");
printf("\n");
printf("***********************************************\n");
printf("请按任意键返回");
_getch();
}
void read()//数据的读取
{
FILE * fp;
fp=fopen("Stu_list","rb");
do
{
fread(&wor[i],sizeof(struct Student),1,fp);//地址 长度 条数 指针
count++;
i++;
}
while(!feof(fp));//判断不等于0
i--;
count--;
fclose(fp);
printf("\n\n");
printf("***********************************\n");
printf("\n");
printf(" o(≧v≦)o~~好棒!!读取成功!!! \n");
printf("\n");
printf("***********************************\n");
printf("请按任意键返回");
_getch();
}
char quit()
{
int q;
printf("***********************************\n");
printf("********** 确认退出吗? **********\n");
printf("\n");
printf("******* 1,确定 *******\n");
printf("******* 2,取消 *******\n");
printf("\n");
printf("***********************************\n");
printf("请输入您的选择,小系为您服务:\n");
scanf("%d",&q);
switch(q)
{
case 1:exit(1);break;
case 2:break;
}
}
int main()
{
int m;
for(m=0;m<40;m++)
{
wor[m].cho=0;
}
int k;
menu1();
if(one>1)
{
one=1;
system("cls");
while(1)
{
system("cls");
printf("\n");
printf("\t欢迎来到学生界面\n");
printf("\n");
printf("\t(1) 课程信息浏览 \n");
printf("\t(2) 课程信息查询 \n");
printf("\t(3) 课程信息读取 \n");
printf("\t(4) 学生选课 \n");
printf("\t(5) 退出 \n");
printf("\n\n");
printf("请输入您的选择,小系为您服务:\n");
scanf("%d",&k);
switch(k)
{
case 1:system("cls");brouse();break;
case 2:system("cls");search();break;
case 3:system("cls");read();break;
case 4:system("cls");choice();break;
case 5:system("cls");quit();break;
}
}
}else if(two>2)
{
two=2;
system("cls");
while(1)
{
system("cls");
printf("\n");
printf("\t欢迎来到管理者界面 \n");
printf("\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(8) 退出 \n");
printf("\n\n");
printf("请输入您的选择,小系为您服务:\n");
scanf("%d",&k);
switch(k)
{
case 1:system("cls");input();break;
case 2:system("cls");brouse();break;
case 3:system("cls");search();break;
case 4:system("cls");revise();break;
case 5:system("cls");dele();break;
case 6:system("cls");save();break;
case 7:system("cls");read();break;
case 8:system("cls");quit();break;
}
}
}
return 0;
}
参考代码3
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
struct Student
{
int num; //课程编号
char name[32]; //名称
char nat[32]; //性质
int time1; //总学时
int time2; //授课学时
int time3; //实验学时
int fen; //学分
};
struct Student stu[40];
int count=0,i=0;
void input()
{
printf("\n\n");
printf("请输入课程编号:");scanf("%d",&stu[i].num);
printf("请输入课程名称:");scanf("%s",&stu[i].name);
printf("请输入课程性质:");scanf("%s",&stu[i].nat);
printf("请输入总学时:");scanf("%d",&stu[i].time1);
printf("请输入授课学时:");scanf("%d",&stu[i].time2);
printf("请输入实验学时:");scanf("%d",&stu[i].time3);
printf("请输入课程学分:");scanf("%d",&stu[i].fen);
count++; //记录录入信息的个数
system("cls"); //清屏
printf("-------------------------------------------\n\n");
printf(" 修改成功 \n\n");
printf("-------------------------------------------\n\n");
printf("\n\n请按任意键返回");
_getch();
}
void brouse() //浏览课程
{
int i;
printf("\n");
printf("编号 名称 性质 总学时 授课学时 实验学时 学分\n");
printf("\n");
for(i=0;i<count;i++)
{
printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n",stu[i].num,stu[i].name,stu[i].nat,stu[i].time1,stu[i].time2,stu[i].time3,stu[i].fen);
printf("\n");
}
printf("请按任意键返回");
_getch();
}
void search() //查询课程
{
void num();
void name();
int i;
printf("\n\n");
printf(" 1.按课程学分查询 \n");
printf(" 2.按课程性质查询 \n");
printf(" 3.返回系统页面 \n");
printf("\n");
scanf("%d",&i);
system("cls");
switch(i)
{
case 1: num();break;
case 2: name();break;
case 3:break;
}
}
void num()//学分查询
{
int i,num;
printf("请输入所查询的课程学分:\n");
scanf("%d",&num);
for(i=0;i<count;i++)
if(stu[i].num==num)
{
printf("查询结果如下:\n\n");
printf("\n编号 名称 性质 总学时 授课学时 实验学时 学分\n\n");
printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n\n",stu[i].num,stu[i].name,stu[i].nat,stu[i].time1,stu[i].time2,stu[i].time3,stu[i].fen);
break;
}
if(i>=count)
{
printf("-------------------------------------------\n\n");
printf(" 很抱歉,没有查到 \n\n");
printf("-------------------------------------------\n\n");
}
printf("请按任意键返回");
_getch();
}
void name()//名称查询
{
int i;
char name[10];
printf("请输入所查课程名称:\n");
scanf("%s",name);
for(i=0;i<count;i++)
if(strcmp(stu[i].name,name)==0)
{
printf("查询结果如下:\n\n");
printf("\n编号 名称 性质 总学时 授课学时 实验学时 学分\n\n");
printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n\n",stu[i].num,stu[i].name,stu[i].nat,stu[i].time1,stu[i].time2,stu[i].time3,stu[i].fen);
break;
}
if(i>=count)
{
printf("-------------------------------------------\n\n");
printf(" 很抱歉,没有查到 \n\n");
printf("-------------------------------------------\n\n");
}
printf("请按任意键返回");
_getch();
}
void revise()//课程信息修改。
{
void renum();
void re_name();
void renat();
void retime1();
void retime2();
void retime3();
void refen();
int j;
printf(" 1.课程编号修改 \n");
printf(" 2.课程名称修改 \n");
printf(" 3.课程性质修改 \n");
printf(" 4.总学时修改 \n");
printf(" 5.授课学时修改 \n");
printf(" 6.实验学时修改 \n");
printf(" 7.学分修改 \n");
printf(" 8.返回管理系统页面 \n");
scanf("%d",&j);
system("cls");
switch(j)
{
case 1: renum();break;
case 2: re_name();break;
case 3: renat();break;
case 4: retime1();break;
case 5: retime2();break;
case 6: retime3();break;
case 7: refen();break;
case 8:break;
}
}
void renum()//课程编号修改
{
char name[32];
int i,t;
printf("请输入您要查询的课程名称:");
scanf("%s",name);
printf("\n\n");
for(i=0;i<count;i++)
if(strcmp(stu[i].name,name)==0)
{
printf("本课程初始编号是:%d\n",stu[i].num);
printf("修改后的之后的编号是:");
scanf("%d",&t);
stu[i].num=t;
printf("-------------------------------------------\n\n");
printf(" 修改成功 \n\n");
printf("-------------------------------------------\n\n");
break;
}
if(i>=count)
{
printf("-------------------------------------------\n\n");
printf(" 很抱歉,没有查到 \n\n");
printf("-------------------------------------------\n\n");
}
printf("请按任意键返回");
_getch();
}
void re_name()//名称修改
{
char name[32];
int i;
char t[32];
printf("请输入您要查询的课程名称:");
scanf("%s",name);
printf("\n");
for(i=0;i<count;i++)
if(strcmp(stu[i].name,name)==0)
{
printf("本课程初始名称是:%d\n",stu[i].name);
printf("修改后的之后的名称是:");
scanf("%s",t);
strcpy(stu[i].name,t);
printf("-------------------------------------------\n\n");
printf(" 修改成功 \n\n");
printf("-------------------------------------------\n\n");
break;
}
if(i>=count)
{
printf("-------------------------------------------\n\n");
printf(" 很抱歉,没有查到 \n\n");
printf("-------------------------------------------\n\n");
}
printf("请按任意键返回");
_getch();
}
void renat()//课程性质修改
{
char name[32];
int i;
char nat[32];
printf("请输入您要查询的课程名称:");
scanf("%s",name);
printf("\n\n");
for(i=0;i<count;i++)
if(strcmp(stu[i].name,name)==0)
{
printf("课程初始性质是:%d\n",stu[i].nat);
printf("修改后的之后的性质是:");
scanf("%s",nat);
strcpy(stu[i].nat,nat);
printf("-------------------------------------------\n\n");
printf(" 修改成功 \n\n");
printf("-------------------------------------------\n\n");
break;
}
if(i>=count)
{
printf("-------------------------------------------\n\n");
printf(" 很抱歉,没有查到 \n\n");
printf("-------------------------------------------\n\n");
}
printf("请按任意键返回");
_getch();
}
void retime1()//总学时修改
{
int t,i;
char name[32];
printf("请输入您要查询的课程名称:");
scanf("%s",name);
printf("\n\n");
for(i=0;i<count;i++)
if(strcmp(stu[i].name,name)==0)
{
printf("本课程初始总学时是:%d\n",stu[i].time1);
printf("修改后的总学时是:");
scanf("%d",&t);
stu[i].time1=t;
printf("-------------------------------------------\n\n");
printf(" 修改成功 \n\n");
printf("-------------------------------------------\n\n");
break;
}
if(i>=count)
{
printf("-------------------------------------------\n\n");
printf(" 很抱歉,没有查到 \n\n");
printf("-------------------------------------------\n\n");
}
printf("请按任意键返回");
_getch();
}
void retime2()//授课学时修改
{
int time2;
char name[32];
int i;
printf("请输入您要修改的课程的名称:");
scanf("%s",name);
printf("\n\n");
for(i=0;i<count;i++)
if(strcmp(stu[i].name,name)==0)
{
printf("本课程初始授课学时是:%s\n",stu[i].time2);
printf("修改后的之后的授课学时是:");
scanf("%d",&time2);
stu[i].time2=time2;
printf("-------------------------------------------\n\n");
printf(" 修改成功 \n\n");
printf("-------------------------------------------\n\n");
break;
}
if(i>=count)
{
printf("-------------------------------------------\n\n");
printf(" 很抱歉,没有查到 \n\n");
printf("-------------------------------------------\n\n");
}
printf("请按任意键返回");
_getch();
}
void retime3()//实验学时修改
{
int time3;
char name[32];
int i;
printf("请输入您要修改的课程的名称是:");
scanf("%s",name);
printf("\n\n");
for(i=0;i<count;i++)
if(strcmp(stu[i].name,name)==0)
{
printf("本课程的初始实验学时是:%d\n",stu[i].time3);
printf("修改后的实验学时是:");
scanf("%d",&time3);
stu[i].time3=time3;
printf("-------------------------------------------\n\n");
printf(" 修改成功 \n\n");
printf("-------------------------------------------\n\n");
break;
}
if(i>=count)
{
printf("-------------------------------------------\n\n");
printf(" 很抱歉,没有查到 \n\n");
printf("-------------------------------------------\n\n");
}
printf("请按任意键返回");
_getch();
}
void refen()//课程学分修改
{
int fen;
char name[32];
int i;
printf("请输入您要修改的课程名称是:");
scanf("%s",name);
printf("\n\n");
for(i=0;i<count;i++)
if(strcmp(stu[i].name,name)==0)
{
printf("本课程初始课程学分是:%s\n",stu[i].fen);
printf("修改后的课程学分是:");
scanf("%d",&fen);
stu[i].fen=fen;
printf("-------------------------------------------\n\n");
printf(" 修改成功 \n\n");
printf("-------------------------------------------\n\n");
break;
}
if(i>=count)
{
printf("-------------------------------------------\n\n");
printf(" 很抱歉,没有查到 \n\n");
printf("-------------------------------------------\n\n");
}
printf("请按任意键返回");
_getch();
}
void dele() //删除课程
{
int i,j;
char del_name[10];
printf("请输入需要删除的课程名称:\n");
scanf("%s",del_name);
printf("\n\n");
for(i=0;i<count;i++)
{
if((strcmp(stu[i].name,del_name)==0))
{
for(j=i;j<count;j++)
{
stu[j]=stu[j+1];
}
printf("-------------------------------------------\n\n");
printf(" 删除成功 \n\n");
printf("-------------------------------------------\n\n");
count--;
}
}
if(i>=count)
{
printf("-------------------------------------------\n\n");
printf(" 很抱歉,删除失败 \n\n");
printf("-------------------------------------------\n\n");
}
printf("请按任意键返回");
_getch();
}
void save() //文件保存
{
FILE * fp;
int i;
if((fp=fopen("Stu_list","wb"))==NULL)
{
printf("不能打开文件\n");
return;
}
for(i=0;i<count;i++)
{
if(fwrite(&stu[i],sizeof(struct Student),1,fp)!=1)
printf("文件输出错误\n");
}
fclose(fp);
printf("\n\n");
printf("-------------------------------------------\n\n");
printf(" 保存成功 \n\n");
printf("-------------------------------------------\n\n");
printf("请按任意键返回");
_getch();
}
void read() //文件读取
{
FILE * fp;
fp=fopen("Stu","rb");
do
{
fread(&stu[i],sizeof(struct Student),1,fp);
count++;
i++;
}
while(!feof(fp));//判断不等于0
i--;
count--;
fclose(fp);
printf("\n\n");
printf("-------------------------------------------\n\n");
printf(" 读取成功 \n\n");
printf("-------------------------------------------\n\n");
printf("请按任意键返回");
_getch();
}
void quit()
{
int q;
printf("\n\t确认退出吗?\n\n");
printf("\t1,确定\n");
printf("\t2,取消\n\n");
scanf("%d",&q);
switch(q)
{
case 1:return;break;
case 2:break;
}
}
void main()
{
int k;
while(1)
{
system("cls");
printf("\n");
printf("1.增加课程 \n");
printf("2.浏览课程 \n");
printf("3.查询课程 \n");
printf("4.修改课程 \n");
printf("5.删除课程 \n");
printf("6.课程文件创建 \n");
printf("7.课程文件读取 \n");
printf("8.退出选修课程系统 \n\n\n");
scanf("%d",&k);
switch(k)
{
case 1:system("cls");input();break;
case 2:system("cls");brouse();break;
case 3:system("cls");search();break;
case 4:system("cls");revise();break;
case 5:system("cls");dele();break;
case 6:system("cls");save();break;
case 7:system("cls");read();break;
case 8:system("cls");quit();break;
}
}
}
全部评论 (0)
还没有任何评论哟~
