C 语言课程设计报告
课题:学生选修课程系统设计
****
**********
******班
2008-9-1
一:题目
[要求]
假定有 n 门课程,,每门课程都有课程编号,课程名称,课程
性质,总学时,授课学时,实验或上机学时,学分,开课学期等信
息,学生可按要求(如总学分不得少于 60)自由选课.试设计一
选修课程系统,使之能提供一下功能:
(1) 系统以菜单方式工作;
(2) 课程信息和学生信息的录入功能(课程信息有文件保
存)----输入;
(3) 课程信息浏览功能----输出;
(4) 查询功能(至少一种查询方式)---算法;
(5) 按学分查询;
(6) 某门课程学生选修情况(可选项).
[提示]
数据结构可用结构体,包括课程和选秀两个结构体,其中课
程结构体包括课程编号, 课程名称,课程性质,总学时,授课学
时,实验或上机学时,学分,开课学期.选修结构体成员包括学
号,课程编号,该结构体的建立主要是为了查询某门课程学生
选修情况.
二:数据结构设计
本系统的实现,全部采用链表这种数据结构,用链表实现课程的
查找,添加,删除,课程的选修,追加选修的课程.课程信息采用结构体这
种数据结构.
三:系统大纲
管理员菜单
主
菜
单
浏览课程
查询课程
添加课程
删除课程
浏览所有课程
查询课程信息
学生菜单
选择选修课程
浏览我选修的课程
删除错选的课程
四:模块设计
(一) 主函数,头文件及结构体声明
主函数设计地比较简洁,只是提供一个主菜单,switch 语句将整个
程序分为两个大的功能模块
[程序]
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include"malloc.h"
typedef struct subjects
{
int num;
char name[20];
char kind[10];
int stime;
int ttime;
int etime;
int score;
int term;
struct subjects *next;
}SUB;
//课程结构体
//课程编号
//课程名称
//课程性质
//总学时
//授课学时
//实验或上机学时
//学分
//开课学期
SUB *head=NULL;
int main()
{
int n,w=1;
do
{
system("cls");
puts("\n\n\t\t*****************MENU******************\n\n");
puts("\t\t\t\t1.以管理员身份登录\n");
puts("\t\t\t\t2.以学生身份登录\n");
puts("\t\t\t\t3.退出");
puts("\n\n\t\t*******************************************\n");
printf("Chiose your number(1-3):[ ]\b\b");
scanf("%d",&n);
switch(n)
{
case 1:Mangers() ;break;
case 2:Students();break;
case 3:w=0;break;
default:;
}
}
while(w==1);
return 0;
}
(二) 管理员功能模块
管理员的功能一共有四个功能:浏览,查询,添加,删除课程.运用
字符串处理函数处理密码的问题,用一个 switch 语句实现函数的调用.
[程序]
//管理员登录菜单
void Mangers()
{
int n,w=1,flag=0,i=3;
char s[8];
char password[7]="123456";
do
{
printf("\n\nEnter password:");
scanf("%s",s);
if(!strcmp(s,password))
{
flag=1;
break;
}
else
{
}
}
while(i>0);
if(!flag)
{
//进行密码匹配验证
printf("\n\nError! You only have %d times! Enter again:\n",i-1);
i--;
printf("you have Enter 3 times!");
exit(0);
//输入密码超过了 3 次!!
//自动退出
}
do
{
system("cls");
puts("\n\n\t\t**************管理员菜单*******************\n\n");
puts("\t\t\t\t1---浏览课程\n");
puts("\t\t\t\t2---查询课程\n");
puts("\t\t\t\t3---添加课程\n");
puts("\t\t\t\t4---删除课程\n");
puts("\t\t\t\t5---返回主菜单");
puts("\n\n\t\t***********************************************\n");
printf("Chiose your number(1-5):[ ]\b\b");
scanf("%d",&n);
switch(n)
{
case 1:prin();break;
case 2:search();break;
case 3:insert();savefile();break;
case 4:del();savefile();break;
case 5:return;
default:;
}
}
while(w==1);
}
(三) 学生功能菜单
学生功能菜单包括六个功能:浏览课程,查询课程,选修课程,浏览
我所选修的课程,添加选修课程,删除错选的课程,也是用到 switch 语句
来调用函数
[程序]
void Students()
{
int n,w=1;
do
//学生登录菜单
{
system("cls");
puts("\n\n\t\t************
学
生
菜
单
**************\n\n");
puts("\t\t\t\t1---浏览所有课程\n");
puts("\t\t\t\t2---查询课程信息\n");
puts("\t\t\t\t3---选择选修课程\n");
puts("\t\t\t\t4---浏览我选修的课程\n");
puts("\t\t\t\t5---删除错选课程\n");
puts("\t\t\t\t6---返回主菜单");
puts("\n\n\t\t***********************************\n");
printf("Chiose your number(1-6):[ ]\b\b");
scanf("%d",&n);
switch(n)
{
case 1:prin();break;
case 2:search();break;
case 3:choose();break;
case 4:prin();break;
case 5:del();savefile1();break;
case 6:return;
default:;
}
}
while(w==1);
}
(四) 创建链表模块
[程序]
SUB *create_form()
{
SUB *head,*tail,*p;
int num,stime,ttime;
int etime,score,term;
char name[20],kind[10];
int size=sizeof(SUB);
head=tail=NULL;
//创建链表
printf("输入选修课程信息:\n");
scanf("%d%s%s%d%d%d%d%d",&num,name,kind,&stime,&ttime,
&etime,&score,&term);
while(num!=0)
{
p=(SUB *)malloc(size);
p->num=num;
strcpy(p->name,name);