四,学生选修课程系统设计
假定有n门课程,每门课程有:课程编号,课程名称,课程性质(公共课、必修课、选修课),总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。试设计一选修课程系统,使之能提供以下功能:
1、系统以菜单方式工作
2、课程信息录入功能(课程信息用文件保存)--输入
3、课程信息浏览功能--输出
4、课程信息查询功能--算法
查询方式
按学分查询
按课程性质查询
5、学生选修课程情况(可选项)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
struct lessons
{
char num[20];
char name[20];
char kind[10];
char total_time[10];
char teaching_time[10];
char experimental_time[10];
char score[5];
char term[10];
struct lessons *next;
}lessons[10];
struct students
{
char name[20];
char cname[20];
char num[20];
}stu[10];
int main()
{
void menu();
void input();
void disply();
void search();
void slook();
FILE *fp1, *fp2;
int a; //功能选择需要的号码
system("cls");
system("color 8f");
system("cls");
struct lessons *head = NULL;
if ((fp1 = fopen("record.txt", "r")) == NULL)
{
fp2 = fopen("record.txt", "w"); //如果不存在record.txt就创建一个
fclose(fp2);
}
Loop:menu();
printf("选择你需要操作的功能号码:\n");
scanf("%d", &a);
getchar();
switch (a)
{
case 0:exit(0); break;
case 1:input(); break;
case 2:disply(); break;
case 3:search(); break;
case 4:slook(); break;
default:printf("Enter error!!\n");
}
printf("请按ENTER返回功能操作菜单\n");
getchar();
goto Loop;
system("pause");
}
void menu()//菜单函数
{
printf("欢迎使用课程选修系统!\n将为您提供以下服务:\n");
printf("1.课程信息的录入;\n");
printf("2.课程信息浏览;\n");
printf("3.查询课程信息;\n");
printf("4.学生的选修情况查询;\n");
printf("0.退出系统;\n");
}
void input()
{
system("cls");
int i, j, m, n, k;
printf("**************欢迎使用课程信息录入功能!**************** \n");
FILE *fp1, *fp2;
struct lessons *head = NULL;
if ((fp1 = fopen("record.txt", "r")) == NULL)
{
fp2 = fopen("record.txt", "w"); //如果不存在record.txt就创建一个
fclose(fp2);
}
printf("请问要输入几个课程信息: \n");
scanf("%d", &m);
printf("请问要输入几个学生选修信息,并且每个学生选几门课: \n");
scanf("%d\t%d", &n, &k);
if ((fp2 = fopen("record.txt", "w")) != NULL)
{
for (i = 0; i < m; i++)
{
printf("\n请输入课程编号:\n");
scanf("%s", lessons[i].num);
printf("请输入课程名称:\n");
scanf("%s", lessons[i].name);
printf("请输入课程性质:\n");
scanf("%s", lessons[i].kind);
printf("请输入总学时:\n");
scanf("%s", lessons[i].total_time);
printf("请输入授课学时:\n");
scanf("%s", lessons[i].teaching_time);
printf("请输入实验或上机学时:\n");
scanf("%s", lessons[i].experimental_time);
printf("请输入学分:\n");
scanf("%s", lessons[i].score);
printf("请输入开课学期:\n");
scanf("%s", lessons[i].term);
printf("\n请输入学生姓名:\n");
scanf("%s", stu[i].name);
printf("\n请输入学生学号:\n");
scanf("%s", stu[i].num);
printf("\n请输入每名学生分别所选的%d门课程:\n", k);
for (j = 0; j < k; j++)
scanf("%s", stu[i].cname);
}
}
printf("录入成功!祝您使用愉快!!\n");
fclose(fp2);
getchar();
system("pause");
}
void disply() //课程信息浏览
{
int i; FILE *fp2;
printf("**************欢迎使用课程信息浏览功能!**************** \n");
if ((fp2 = fopen("record.txt", "r")) == NULL)
printf("无课程信息\n");
else
{
fprintf(fp2, "课程编号\t课程名称\t课程性质\t总学时\t授课学时\t实验或上机学时\t学分\t开课学期\n");
for (i = 0; i < 10; i++)
printf("\n %s\t%s\t%s\t%s\t%s\t%s\t%s\t%s \n", lessons[i].num, lessons[i].name, lessons[i].kind, lessons[i].total_time,
lessons[i].teaching_time, lessons[i].experimental_time, lessons[i].score, lessons[i].term);
}
getchar();
fclose(fp2);
system("pause");
}
void search() //课程信息查询功能
{
int i = 0, d = 0, e = 0, j = 0, k;
struct lessons a;
system("cls");
printf("**************欢迎使用课程信息查询功能!**************** \n");
printf("请选择查询方式:\n0.退出\n1.按学分查询\n2.按课程性质查询\n");
scanf("%d", &k);
if (k >= 0 && k <= 2)
{
if (k == 0)
return;
if (k == 1)
{
printf("请输入学分:\n");
scanf("%s", a.score);
for (i = 0; i < 10; i++)
{
if (strcmp(a.score, lessons[i].score) == 0)
printf("课程编号\t课程名称\t课程性质\t总学时\t授课学时\t实验或上机学时\t学分\t开课学期\n");
printf("\n %s\t%s\t%s\t%s\t%s\t%s\t%s\t%s \n", lessons[i].num, lessons[i].name, lessons[i].kind, lessons[i].total_time,
lessons[i].teaching_time, lessons[i].experimental_time, lessons[i].score, lessons[i].term);
}
printf("祝您学习愉快!!\n");
}
if (k == 2)
{
printf("请输入课程性质:\n");
scanf("%s", a.kind);
for (i = 0; i < 10; i++)
{
if (strcmp(a.kind, lessons[i].kind) == 0)
printf("课程编号\t课程名称\t课程性质\t总学时\t授课学时\t实验或上机学时\t学分\t开课学期\n");
printf("\n %s\t%s\t%s\t%s\t%s\t%s\t%s\t%s \n", lessons[i].num, lessons[i].name, lessons[i].kind, lessons[i].total_time,
lessons[i].teaching_time, lessons[i].experimental_time, lessons[i].score, lessons[i].term);
}
printf("祝您学习愉快!!\n");
}
}
system("pause");
}
void slook()//学生选修课程信息查询功能
{
int s, i, j, k;
struct students a;
system("cls");
printf("**************欢迎使用学生课程选修情况查询功能!**************** \n");
printf("请输入每个学生需要选几门课: \n");
scanf("%d", &k);
printf("请选择课程选修查询方法:\n0.退出系统\n1.使用姓名查询\n2.使用学号查询\n");
scanf("%d", &s);
if (s >= 0 && s <= 2)
{
if (s = 0)
return;
if (s = 1)
{
printf("请输入学生姓名:\n");
scanf("%s", a.name);
for (i = 0; i < 10; i++)
{
if (strcmp(a.name, stu[i].name) == 0)
{
for (j = 0; j < k; j++)
printf("%s\t", stu[i].cname);
}
}
printf("祝您学习愉快!\n");
}
if (s == 2)
{
printf("请输入学生学号:\n");
scanf("%s", a.num);
for (i = 0; i < 10; i++)
{
if (strcmp(a.num, stu[i].num) == 0)
{
for (j = 0; j < k; j++)
printf("%s\t", stu[i].cname);
}
}
}
}
system("pause");
}
不足之处,请多指教!