#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
struct work { //学生信息结构体
int Number; //课程编号号
char name[20]; //课程名称
char sex; // 课程性质
char date[20]; // 总学时
char date1[20]; // 授课学时
char date2[20]; // 上机学时
float wages; //学分
char education[20]; //开课学期
int xiaoxuan; //选课信息
};
struct work worker[100], worker1;
void menu(); //主菜单
void input(); //输入课程信息
void save(int m); //存储信息
int read(); // 读取信息
void display();//浏览课程信息
void add(); //添加
void search(); //查找
void search_wages(); //按学分查找
void search_sex(); //按课程性质查找
void Delete(); //删除操作
void change(); //修改操作
void xuan();//选课操作
void Deletett();//退课操作
int main()
{
int n;
system("color F3");
while (1)
{
menu();
printf("请输入序号(1-8): ");
scanf_s("%d", &n);
switch (n) {
case 1: system("cls");
printf("\n");
printf("录入课程信息\n");
input();
break;
case 2: system("cls");
printf("\n");
printf("浏览课程信息\n");
display();
printf("\n按Enter键继续\n");
getchar();
getchar();
system("cls");
break; //执行到相应程序跳出switch
case 3: system("cls");
printf("\n");
printf("查询课程信息\n");
search();
break; //执行到相应程序跳出switch
case 4: system("cls");
printf("\n");
printf("删除课程信息\n\n");
Delete();
case 5: system("cls");
printf("\n");
printf("修改课程信息\n");
display(); //调用浏览函数
change();
break; //执行到相应程序跳出switch
case 6: system("cls");
xuan();
case 7: system("cls");
Deletett();
case 8: system("cls");
printf("Thank you for using !\n\n\n\n\n\n");
getchar();
getchar();
exit(8);
break; //执行到相应程序跳出switch
}
}
}
void menu() //主菜单
{
printf(" 学生选修课系统 \n\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");
printf("\n");
}
void input() //录入课程信息
{
int i, j, m, num;
char s = 'W';
char t = 'M';
char sex;
printf("尊敬的领导,请您输入需要创建新的选修课程数量: ");
scanf_s("%d", &m);
system("cls");
printf("\n");
for (i = 0; i < m; i++) //循环录入m个新的选修课程信息
{
printf("第%d个选修课信息输入:\n", i + 1);
printf("请输入选修课号: ");
scanf_s("%d", &num);
worker[i].Number = num; //将重新输入的选修课号录入程序中
printf("请输入课程名称: ");
scanf("%s", &worker[i].name);
do
{
printf("请输入课程性质(W/M)(W为一类,M为二类): ");
getchar();
scanf("%c", &worker[i].sex);
} while (1);
printf("请输入总学时: ");
scanf("%s", &worker[i].date);
do
{
printf("请输入学分: ");
scanf_s("%f", &worker[i].wages);
if (worker[i].wages > 0)
{
break;
}
else
{
printf("对不起,您输入格式错误,请重新输入!\n");
}
} while (1);
printf("请输入开课学期: ");
scanf("%s", worker[i].education);
system("cls");
printf("\n一个新的信息创建完成!\n\n");
}
save(m); //保存入文件中
}
void save(int m) //保存文件函数
{
int i;
FILE* fp;
if ((fp = fopen("C:\\选修课.txt", "wb")) == NULL) /*创建文件并判断是否能打开*/
{
printf("cannot open file!\n");
exit(0);
}
for (i = 0; i < m; i++) /*将内存中职工的信息输出到磁盘文件中去*/
if (fwrite(&worker[i], sizeof(struct work), 1, fp) != 1)
printf("file write error!\n");
fclose(fp);
}
int read() //导入函数
{
FILE* fp;
int i = 0;
if ((fp = fopen("C:\\选修课.txt", "rb")) == NULL)
{
printf("cannot open file!\n");
exit(0);
}
else
{
do {
fread(&worker[i], sizeof(struct work), 1, fp);
i++;
} while (feof(fp) == 0);
}
fclose(fp);
return(i - 1);
}
void display() //浏览选修课信息
{
int i;
int m = read(); //读取文件
printf("\n所有选修课信息:\n");
printf("\n选修课号\t选修课名称\t性质\t总学时\t学分\t开课学期\n");
for (i = 0; i < m; i++)
printf("\n%d\t%s\t%c\t%s\t%5.2f\t%s\n", worker[i].Number, worker[i].name, worker[i].sex, worker[i].date, worker[i].wages, worker[i].education);
printf("\n");
}
void search()//查询选修课信息
{
int t;
do {
printf("\n 学分查询请按 1; 课程性质查询请按 2; 进入主菜单请按 0 : ");
scanf("%d", &t); //输入数字对应操作选项
if (t >= 0 && t <= 3)
{
break;
}
else { printf("您输入有误,请重新选择!"); }
} while (0);
system("cls");
while (1)
{
switch (t)
{
case 0: main();
break;
case 1: printf("\n按学分查询\n");
//search_wages();
break;
case 2: printf("\n按课程性质查询\n");
search_sex();
break;
default:break;
}
system("cls");
}
}
void search_sex()//按课程性质查信息
{
char num1;
int i, t, n = 0;
int m = read();
printf("\n请输入要查找的课程性质: ");
scanf("%d", &num1);
for (i = 0; i < m; i++) //遍历
if (num1 == worker[i].sex)
{
if (n == 0)
{
printf("\n已找到以下信息:\n");
printf("\n选修课号\t选修课名称\t性质\t总学时\t学分\t开课学期\n");
}
n++;
printf("\n %d\t%s\t%c\t%s\t%5.2f\t%s\n", worker[i].Number, worker[i].name, worker[i].sex, worker[i].date, worker[i].wages, worker[i].education);
}
if (n == 0) //没有一个符合条件
{
printf("\n没有!\n");
getchar();
getchar();
}
else
{
printf("\n查询到有 %d 个员工符合要求。\n", n);
printf("\n");
printf("删除选修课请按 1,修改信息请按 2,继续查询请按 3,返回上一层请按 4,返回主菜单请按 0 :");
scanf("%d", &t); //输入数字对应操作选项
switch (t)
{
case 0: system("cls");
main();
break;
case 1: //Delete();
break;
case 2: //change();
break;
case 3: break;
case 4: system("cls");
search();
break;
default:break;
}
}
printf("返回主菜单请按 0 :");
scanf("%d", &t); //输入数字对应操作选项
switch (t)
{
case 0: system("cls");
main();
break;
case 1: //Delete();
break;
case 2: //change();
break;
case 3: break;
case 4: system("cls");
search();
break;
default:break;
}
}
void Delete() //删除课程信息
{
int m = read(); //读取文件
int i, j, t, n, f, Num; //f用于调用第一个switch中的函数 t用于下面第二个switch语句调用Delete和返回 n用于下面确认是否删除
display();
printf("请您输入要删除的选修课号: ");
scanf("%d", &Num);
for (i = 0, f = 1; f && i < m; i++)
{
if (worker[i].Number == Num)
{
printf("\n已找到此选修课,原始记录为:\n");
printf("\n选修课号\t选修课名称\t性质\t总学时\t学分\t开课学期\n");
printf("\n %d\t%s\t%c\t%s\t%5.2f\t%s\n", worker[i].Number, worker[i].name, worker[i].sex, worker[i].date, worker[i].wages, worker[i].education);
printf("\n确认删除请按 1,取消删除请按 0: ");
scanf("%d", &n);
if (n == 1)
{
for (j = i; j < m - 1; j++)
worker[j] = worker[j + 1]; //当找到第j个职工时,for语句后j自加了1,所以下面的应该把改后的信息赋值给第j-1个人
f = 0;
}
else f = 2;
}
}
system("cls");
switch (f) {
case 0: m = m - 1;
printf("\n\t\t\t\t\t删除成功!\n");
save(m); //调用保存函数
display(); //调用浏览函数
break;
case 1: printf("\n\t\t\t\t对不起,没有!\n");
display(); //调用浏览函数
break;
case 2: printf("\n\t\t\t\t取消删除!\n");
break;
}
//display(); /*调用浏览函数*/
printf("\n继续删除请按1,返回主菜单请按0: ");
scanf("%d", &t); //输入t调用switch中的函数
system("cls");
switch (t)
{
case 1: Delete();
break;
case 0: system("cls");
main();
break;
default: break;
}
system("cls");
}
void change() //修改课程信息
{
int Number;
char name[20];
char sex;
char date[20];
char education[20];
float wages;
int b = 1, c, i, j, n, t, k = 0, g;
int m = read(); //导入文件内的信息
printf("\n");
printf("请输入要修改的选修课的选修课号: ");
scanf("%d", &Number);
system("cls");
for (i = 0; i < m; i++)
{
if (worker[i].Number == Number)
{
k = 1;
printf("\n已找到,其记录为:\n");
printf("\n选修课号\t选修课名称\t性质\t总学时\t学分\t开课学期\n");
printf("\n %d\t%s\t%c\t%s\t%5.2f\t%s\n", worker[i].Number, worker[i].name, worker[i].sex, worker[i].date, worker[i].wages, worker[i].education);
printf("\n确认修改请按1,取消修改请按0:");
scanf("%d", &n);
if (n == 1)
{
printf("\n需要进行修改的选项\n 1.选修课号 2.选修课名 3.性质 4.总学时 5.学分 6.开课信息 \n");
printf("请输入你想修改的那一项序号: ");
scanf("%d", &c); //输入数字对应操作选项
do {
switch (c)
{
case 1: printf("选修课号改为: ");
scanf("%d", &g);
worker[j].Number = g; //将重新输入的职工号录入程序中
break;
case 2: printf("选修课名改为: ");
scanf("%s", name);
strcpy(worker[i].name, name);
break;
case 3: printf("性质改为:");
getchar();
scanf("%c", &sex);
worker[i].sex = sex;
break;
case 4: printf("总学时改为: ");
scanf("%s", &date);
strcpy(worker[i].date, date);
break;
case 5: printf("学分改为: ");
scanf("%f", &wages);
worker[i].wages = wages;
break;
case 6: printf("开课学期改为: ");
scanf("%s", education);
strcpy(worker[i].education, education);
break;
}
printf("\n确认修改 请按1,重新输入 请按2: ");
scanf("%d", &b);
if (b == 1)
{
system("cls");
save(m);//储存修改后的数据
printf("\n");
display();//浏览修改后的数据
}
} while (b == 2);
}
}
else if (i == (m - 1)) i++;
}
if (k == 0) {
printf("\n对不起,您输入有误!\n");
getchar();
getchar();
}
else {
printf("\n继续修改请按 1,退出修改请按 0: ");
scanf("%d", &t);
}
system("cls");
switch (t)
{
case 1: display();
change();//返回修改函数
break;
case 0: break;
default:break;
}
system("cls");
}
void xuan()
{
int num, i, m, t, zong = 0;
display();
printf("尊敬的同学,请输入需要选的选修课程数量: ");
scanf_s("%d", &m);
printf("\n");
for (i = 0; i < m; i++)//循环录入m个新的选修课程信息
{
printf("第%d个选修课信息输入:\n", i + 1);
printf("请输入选修课号: ");
scanf_s("%d", &num);
worker[i].xiaoxuan = num; //将重新输入的选修课号录入程序中
zong += worker[i].wages;
}
printf("选课成功\n返回主菜单请按1:\n");
if (zong < 30)
printf("警告!!!!所选课总学分少于30,建议再次选择");
scanf("%d", &t);
if (t == 1)
system("cls");
main();
}
void Deletett() //删除选课信息
{
int m = read(); //读取文件
int i, j, t, n, f, Num;
display();
printf("请您输入要退选的选修课号: ");
scanf("%d", &Num);
for (i = 0, f = 1; f && i < m; i++)
{
if (worker[i].Number == Num) //判断输入职工号是否与原职工号相同
{
printf("\n已找到此选修课,原始记录为:\n");
printf("\n选修课号\t选修课名称\t性质\t总学时\t学分\t开课学期\n");
printf("\n %d\t%s\t%c\t%s\t%5.2f\t%s\n", worker[i].Number, worker[i].name, worker[i].sex, worker[i].date, worker[i].wages, worker[i].education);
printf("\n确认退课请按 1,取消退课请按 0: ");
scanf("%d", &n);
if (n == 1) //如果删除,则其他的信息都向前移一行
{
for (j = i; j < m - 1; j++)
worker[j].xiaoxuan = worker[j + 1].xiaoxuan;
f = 0;
}
else f = 2;
}
}
system("cls");
switch (f) {
case 0: m = m - 1;
printf("\n\t\t\t\t删除成功!\n");
save(m); //调用保存函数
display(); //调用浏览函数
break;
case 1: printf("\n\t\t\t对不起,没有!\n");
display(); //调用浏览函数
break;
case 2: printf("\n\t\t\t\t取消删除!\n");
break;
}
//display(); /*调用浏览函数*/
printf("\n返回主菜单请按0: ");
scanf("%d", &t); //输入t调用switch中的函数
system("cls");
switch (t)
{
case 0: system("cls");
main();
break;
default: break;
}
system("cls");
}
03-20
457
12-15
05-12
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交