C语言程序设计
《C语言课程设计》课程教学大纲
课程英文名称:Course Exercise in C Language
课程编号:05111401
设计周数:1周
适用专业:计算机科学与技术
一、课程的性质、目的和任务
该课程是一门计算机重要的专业实践性课程。
它培养学生加深对C语言课程和基本知识的理解;掌握使用C语言进行软件设计的基本方法;提高运用C语言解决实际问题的能力;
该课程的任务是要求学生在完成程序设计的同时能够写出比较规范的设计报告,促进学生基本程序设计素养的培养和软件工作者的工作作风的训练。
二、课程设计要求:
1、 课程设计应由学生本人独立完成或者小组成员(小组不超过2人)共同完成,严禁抄袭(对自己的程序不熟悉,读不懂程序中的关键功能部分,对程序的结构不清楚,对程序的功能不了解等),一经验收教师认定其抄袭行为,成绩即为不及格。
发现最后的程序基本相同者(程序构思、基本结构、变量设计、函数设 计、文件操作等基本相同),则相同者均为不及格。
所选题目中必须要运用到所学的如下知识:
(a)数组、结构体或共用体
(b)指针
(c)选择结构程序设计、循环结构程序设计
(d)自定义函数及其调用
(e)简单的文件操作
能够顺利调试通过并运行所编制的程序,并且能够读懂所选题目的源程 序,讲解程序中的主要功能部分,以证明该程序不是其他人给编写的或从其他的书籍中原封不动照抄照搬过来的。
5、 按时上机调试,认真完成课程设计。
三、课程设计内容
从下列参考题目中选择
1、某班学生成绩管理,包括以下功能:
从键盘输入包括学号、姓名、各门课程成绩(不少于5门),并将其保存在磁盘文件student里
打开文件后,计算每个人的总分和平均分,排序并保存
具有在文件中进行单项查询或多项查询的功能(即能够按照给定的关键字,如姓名等找出满足条件的纪录)
具有输出文件数据信息的功能
某班学生基本信息管理,包括以下功能:
从键盘输入包括学号、姓名、性别、出生年月日、籍贯、所在院系、专业、奖惩信息等,并将其保存在磁盘文件student里
具有在文件中进行单项查询或多项查询的功能(即能够按照给定的关键字姓名等找出满足条件的纪录)
打开文件后按照出生年月日排序
具有输出文件数据信息的功能
建立学生管理链表,能够实现学生日常管理功能,包括:
学生基本信息链表的建立
链表中学生结点的插入
链表中学生结点的删除
链表的浏览(遍历)
链表中学生结点的查找
4、职工信息管理系统设计
职工信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等(职工号不重复)。试设计一职工信息管理系统,使之能提供以下功能:
职工信息录入功能(职工信息用文件保存)--输入
职工信息浏览功能 --输出
查询或排序功能:(至少一种查询方式) --算法
●按工资查询
●按学历查询等
职工信息删除、修改功能(任选项)
5、飞机订票系统设计
假定民航机场共有n个航班,每个航班有一航班号、确定的航线(起始站、终点站)、确定的飞行时间(星期几)和一定的成员订额。试设计一民航订票系统,使之能提供下列服务:
航班信息录入功能(航班信息用文件保存)--输入
航班信息浏览功能--输出
查询航线:(至少一种查询方式)--算法
●按航班号查询
●按终点站查询
承办订票和退票业务(可选项)
6、 学生选修课程系统设计
假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。试设计一选修课程系统,使之能提供以下功能:
课程信息录入功能(课程信息用文件保存)--输入
课程信息浏览功能--输出
查询功能:(至少一种查询方式)--算法
●按学分查询
●按课程性质查询
学生选修课程(可选项)
7、 图书信息管理系统设计
图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试设计一图书信息管理系统,使之能提供以下功能:
图书信息录入功能(图书信息用文件保存)--输入
图书信息浏览功能--输出
查询或排序功能:(至少一种查询方式)--算法
●按书名查询
●按作者名查询
图书信息的删除与修改(可选项)
8、 人员管理系统
现有一批人员的数椐,要求输入计算机并存放在内存中,然后增加若干个新人员的记录,并可打印人员清单,实现文件存盘和读入文件进行修改的功能。人员的基本信息包括姓名,性别,年龄,身份证号和简历(80个字符以内)。要求设计菜单来调用其各功能模块:
新建文件
打开文件
输入记录
打印清单
保存文件
退出
9、宿舍管理系统:
现有学生宿舍的数据,要求输入计算机并存放在内存中,然后增加3个宿舍的记录并可以输出材料清单,实现文件存盘和对所选择的记录进行删除,修改。并统计宿舍的总人数,宿舍的基本信息包括楼号、房间号、所住学生班级、人数,要求设计菜单来调用其各功能模块:
新建文件
打开文件
输入记录
插入记录
修改记录
打印清单
保存文件
退出
以上给出的仅为参考题目,学生在选择过程中根据自己的实际,按照上述题目的难易程度,寻找合适的课程设计题目,也可以自己设计题目,经指导教师确认后定题,一旦题目选定,不允许随意更改。
四、考核方式
通过设计答辩方式,并结合学生的动手能力,独立分析解决问题的能力和创新精神,总结报告和答辩水平以及学习态度综合考评。成绩分优、良、中、及格和不及格五等。
1、程序设计的可用性,实用性,通用性,可扩充性(40%)
2、总结报告(30%)
3、答辩成绩(30%)
五、教学参考书目
《C程序设计》 谭浩强
追问:加我QQ说 365549735
答案:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "conio.h"
#define LEN sizeof(struct student)
typedef struct student
{
char num[10];
char name[10];
int math,english,computer;
int total;
struct student *next;
}student, *LinkList;
void Login();
void weixiu();
void menu() ;
int Open(LinkList L);
void printstart() ;
void Wrong() ;
void Nofind() ;
void printc();
void getinf(LinkList L);
void orderbyzongfen(LinkList L);
void deleteall(LinkList L);
void Developer();
void Sort(LinkList L);
void Save(LinkList L);
LinkList dingwei(LinkList L,char findmess[],char nameornum[]);
LinkList L;
int main(void)
{
Login();
return 0;
}
/*---------------------------------------------------输入学生成绩并计算-----------------------------------------------------*/
void getinf(LinkList L)
{
LinkList r,s;
r=(LinkList )malloc(LEN);
printf("请输入学号:");
scanf("%s",r->num);
printf("请输入姓名:");
scanf("%s",r->name);
printf("请输入数学成绩:");
scanf("%d",&r->math);
printf("请输入英语成绩:");
scanf("%d",&r->english);
printf("请输入电脑成绩:");
scanf("%d",&r->computer);
r->total=r->math+r->english+r->computer;
s=L->next;
L->next=r;
r->next=s;
printf("追加记录成功!\n");
}
/*------------------------------该函数用于定位连表中符合要求的接点,并返回该指针---------------------------*/
LinkList dingwei(LinkList L,char findmess[],char nameornum[])
{
LinkList r;
if(strcmp(nameornum,"num")==0)
{
r=L->next;
while(r!=NULL)
{
if(strcmp(r->num,findmess)==0)
return r;
r=r->next;
}
r=NULL;
return r;
}
else if(strcmp(nameornum,"name")==0)
{
r=L->next;
while(r!=NULL)
{
if(strcmp(r->name,findmess)==0)
return r;
r=r->next;
}
r=NULL;
return r;
}
else return 0;
}
/*---------------------------------------------删除记录--------------------------------------------------*/
void deleteall(LinkList L)
{
char ch;
printf("确定您要清除文件里所有学生的信息,这样就无法恢复数据了( Y or N )\n");
getchar();
scanf("%c",&ch);
if(ch == 'y' || ch == 'Y')
{
L->next = NULL;
printf("文件里学生成绩信息已经被清除!\n");
}
else return;
}
/*-------------------------------------------------排序记录------------------------------------------------------------*/
void Sort(LinkList L)
{
LinkList p,r,s;
p = L;
r = p ->next;
s = p ->next->next;
while(s != NULL)
{
while(s ->total < p ->next->total)
p = p ->next;
if(p ->next == s)
{
printf("排序已完成!\n");return;
}
else
{
r ->next = s ->next;
s ->next = p ->next;
p ->next = s;
s = r ->next;
p = L;
}
}
printf("排序成功!\n");
}
/*--------------------------------------------------------- 排名---------------------------------------------------*/
void orderbyzongfen(LinkList L)
{
LinkList p;
p=L;
if(p->next!=NULL)
{
printstart();
printc();
for (p=p->next;p!=NULL;p=p->next)
printf("%3s\t%3s\t%5d\t%9d\t%5d\t%7d\n",p->num,p->name,p->math,p->english,p->computer,p->total);
printstart();}
else Nofind();
}
/*-----------------------------------------------------------打开文件--------------------------------------------------------*/
int Open(LinkList L)
{
FILE *fp;
LinkList p1,p2;
char choose;
int count=0;
p1=L;
p1->next=NULL;
fp=fopen("E:\\student_score","rb");
if(fp==NULL)
{
printf("\n=====>提示:文件还不存在,是否创建?(y/n)\n");
scanf("%c",&choose);
if(choose=='y'||choose=='Y')
{
fp=fopen("E:\\student_score","wb");
printf("文件已创建,请按回车键关闭,然后重新打开软件\n");getchar();getchar();exit(0);
}
else exit(0);
}
p2=(LinkList)malloc(LEN);
while(fread(p2,LEN,1,fp))
{
p2->next=NULL;
p1->next=p2;
p1=p2;
p2=(LinkList)malloc(LEN);
count++;
}
p2->next=NULL;
fclose(fp);
return 1;
}
/*-----------------------------------------------------保存文件----------------------------------------------------*/
void Save(LinkList L)
{
FILE *fp;
LinkList p1;
char choose;
if(L ->next == NULL)
{printf("没有可以保存的信息!\n");
return;}
printf("确认保存?(y/n)\n");
getchar();
scanf("%c",&choose);
getchar();
if(choose == 'y' || choose == 'Y')
{
fp=fopen("E:\\student_score","wb");
p1=L;
p1=p1->next;
while(p1)
{
if(fwrite(p1,LEN,1,fp)==1)
{
p1=p1->next;
}
else
break;
}
fclose(fp);
printf("保存成功!\n");
}
else printf("没有保存!\n");
}
void weixiu()
{
printf("\n\n\n");
printf("\n **************************************************************");
printf("\n ");
printf("\n 欢迎使用成绩管理系统.本系统尚在试用阶段,有问题请与我联系! ");
printf("\n ");
printf("\n 我的qq是 365549735 ");
printf("\n **************************************************************");
}
/*----------------------------------------------------界面函数-------------------------------------------*/
void Login()
{
system("color 5f");
char ch[23];
int i=0;
char mima[45];
L=(LinkList)malloc(LEN);
int sel,count=0;
weixiu();
printf("\n\n\n");
printf("\n请选择您的登陆方式( 1 :管理员 2 :普通用户 )");
scanf("%d",&i);
switch(i)
{
case 1:
system("cls");
weixiu();
printf("\t\t\t\t用户名:");
scanf("%s",ch);
printf("\t\t密码:");
scanf("%s",mima);
if(strcmp(mima,"123456")==0 && strcmp(ch,"何涛")==0)
{
getchar();printf("\n按回车返回主菜单\n");getchar();
system("cls");
}
else
{
printf("您的用户名或密码有误,无法登陆!\n");
exit(0);
}
menu();
Open(L);
for (scanf("%d",&sel);sel!=0;system("cls"),menu(),scanf("%d",&sel))
{
switch (sel)
{
case 1:
getinf(L);
count++;Save(L);getchar();printf("\n按回车返回主菜单\n");getchar();
break;
case 2:Sort(L);orderbyzongfen(L);getchar();printf("\n按回车返回主菜单\n");getchar();
break;
case 3:
deleteall(L);getchar();printf("\n按回车返回主菜单\n");getchar();
count--;
break;
case 4:
Developer();getchar();printf("\n按回车返回主菜单\n");getchar(
上一个:什么叫C语言?
下一个:如何学习c语言