C语言课程设计报告

发布 2022-10-03 03:33:28 阅读 5154

c语言课程设计报告---学生成绩简单管理程序。

一、系统菜单的主要功能。

1)输入若干条记录。

2)显示所有记录。

3)按学号排序。

4)插入一条记录。

5)按姓名查找,删除一条记录。

6)查找并显示一条记录。

7)输出统计信息 (新增)

8)从正文中添加数据到结构体数组中。

9)将所有数据写入文件中。

0)退出程序。

二、题目分析。

该题主要考察学生对结构体,指针,文件的操作,以及c语言算法的掌握,所以完成此道题目要求较强的设计能力,尤其是要有一种大局观的意识。如何调程序也非常重要,通过这个程序可以学习到以前调试短程序没有的的经验。

菜单中的每一个选项都对应一个子程序,子程序的算法几乎囊获了所有c语言学过的技巧,下面就各个子程序中的功能进行说明:

功能1和4的算法相似,输入一条记录到结构体中去,其中有一部很关键,就是通过gets将所有的多余的字符,回车读去,否则就会出错。

功能2是显示所有的记录,通过循环输出,格式也比较重要。

功能3为按学号排序,因为学号定义成了字符数组的形式,因此在运用冒泡法进行排序的时候,要用到strcmp,strcpy等函数。

功能5为按姓名删除记录,先输入姓名,再一一比较,如果没有则返回失败信息,如果找到就将此记录都向前移一位,返回n-1。

功能6的算法在5中就已经体现了,输入姓名,一一比较。

功能7为新增的功能,因为考虑到原来给出的函数中竟然没有对学生成绩的统计功能,因此新增此功能,可以得出所有的记录个数,最高、最低、平均分,并输出相关的学生信息等。

功能8和9是对文件的操作,提前准备好数据。

三、程序正文部分。

#include<> 引用库函数*/

#include<>

#include<>

#include<>

typedef struct /*定义结构体数组*/

char num[10]; 学号*/

char name[20]; 姓名*/

int score; /成绩*/

student;

student stu[80]; 结构体数组变量*/

int menu_select() 菜单函数*/

char c;

do{system("cls");运行前清屏*/

printf("\t\t***students' grade management system***n");菜单选择*/

printf("\t\t | 1. input records |");

printf("\t\t | 2. display all records |");

printf("\t\t | 3. sort |");

printf("\t\t | 4. insert a record |");

printf("\t\t | 5. delete a record |");

printf("\t\t | 6. query |");

printf("\t\t | 7. statistic |");

printf("\t\t | 8. add records from a text file|");

printf("\t\t | 9. write to a text file |");

printf("\t\t | 0. quit |");

printf("\t\tn");

printf("\t\t\tgive your choice(0-9):"

c=getchar();读入选择*/

while(c<'0'||c>'9');

return(c-'0');返回选择*/

int input(student stud,int n) /输入若干条记录*/

int i=0;

char sign,x[10]; x[10]为清除多余的数据所用*/

while(sign!='n'&&sign!='n') 判断*/

printf("\t\t\tstudent's num:")交互输入*/

scanf("\t\t\t%s",stud[n+i].num);

printf("\t\t\tstudent's name:")

scanf("\t\t\t%s",stud[n+i].name);

printf("\t\t\tstudent's score:")

scanf("\t\t\t%d",&stud[n+i].score);

gets(x); 清除多余的输入*/

printf("\t\t\tany more records?(y/n)")

scanf("\t\t\t%c",&sign); 输入判断*/

i++;return(n+i);

void display(student stud,int n) /显示所有记录*/

int i;

printf("\t\t\tn");格式头*/

printf("\t\t\tnumber name score");

printf("\t\t\tn");

for(i=1;i1&&i%10==0) /每十个暂停*/

printf("\t\t\tn");格式*/

printf("\t\t\t");

system("pause");

printf("\t\t\tn");

printf("\t\t\t");

system("pause");

void sort_by_num(student stud,int n) /按学号排序*/

int i,j,*p,*q,s;

char t[10];

for(i=0;i0)

strcpy(t,stud[j+1].num);

strcpy(stud[j+1].num,stud[j].num);

strcpy(stud[j].num,t);

strcpy(t,stud[j+1].name);

strcpy(stud[j+1].name,stud[j].name);

strcpy(stud[j].name,t);

p=&stud[j+1].score;

q=&stud[j].score;

s=*p;p=*q;

q=s;int insert_a_record(student stud,int n) /插入一条记录*/

char x[10]; 清除多余输入所用*/

printf("\t\t\tstudent's num:")交互式输入*/

scanf("\t\t\t%s",stud[n].num);

printf("\t\t\tstudent's name:")

scanf("\t\t\t%s",stud[n].name);

printf("\t\t\tstudent's score:")

scanf("\t\t\t%d",&stud[n].score);

gets(x);

n++;sort_by_num(stud,n); 调用排序函数*/

printf("\t\t\tinsert successed!");返回成功信息*/

return(n);

int delete_a_record(student stud,int n) /按姓名查找,删除一条记录*/

char s[20];

int i=0,j;

printf("\t\t\ttell me his(her) name:")交互式问寻*/

scanf("%s",s);

while(strcmp(stud[i].name,s)!=0&&istud[i].score) j=i;

if(stud[k].score

**er=1.0*sum/n;

printf("\t\t\tthere are %d records.",n); 总共记录数*/

printf("\t\t\tthe hignest score:");最高分*/

printf("\t\t\tnumber:%s name:%s score:%d",stud[j].num,stud[j].name,stud[j].score);

printf("\t\t\tthe lowest score:");最低分*/

printf("\t\t\tnumber:%s name:%s score:%d",stud[k].num,stud[k].name,stud[k].score);

printf("\t\t\tthe **erage score is %5.2f",**er); 平均分*/

int addfromtext(student stud,int n) /从文件中读入数据*/

int i=0,num;

file *fp; /定义文件指针*/

char filename[20]; 定义文件名*/

printf("\t\t\tinput the filename:")

scanf("\t\t\t%s",filename); 输入文件名*/

if((fp=fopen(filename,"rb"))null) /打开文件*/

printf("\t\t\tcann't open the file");打开失败信息*/

printf("\t\t\t");

system("pause");

return(n);

fscanf(fp,"%d",&num); 读入总记录量*/

while(i

fscanf(fp,"%s%s%d",stud[n+i].num,stud[n+i].name,&stud[n+i].score);

i++;n+=num;

fclose(fp); 关闭文件*/

printf("\t\t\tsuccessed!");

printf("\t\t\t");

system("pause");

return(n);

void writetotext(student stud,int n) /将所有记录写入文件*/

int i=0;

file *fp; /定义文件指针*/

char filename[20]; 定义文件名*/

printf("\t\t\twrite records to a text file");输入文件名*/

printf("\t\t\tinput the filename:")

scanf("\t\t\t%s",filename);

if((fp=fopen(filename,"w"))null) /打开文件*/

printf("\t\t\tcann't open the file");

system("pause");

return;

fprintf(fp,"%d",n); 循环写入数据*/

while(i

fprintf(fp,"%16s%-15s%d",stud[i].num,stud[i].name,stud[i].score);

i++;fclose(fp); 关闭文件*/

printf("successed!");返回成功信息*/

void main() 主函数*/

int n=0;

for(;;

switch(menu_select())选择判断*/

case 1:

printf("\t\t\tinput records");输入若干条记录*/

n=input(stu,n);

break;

case 2:

printf("\t\t\tdisplay all records");显示所有记录*/

display(stu,n);

break;

case 3:

printf("\t\t\tsort");

sort_by_num(stu,n); 按学号排序*/

printf("\t\t\tsort suceessed!");

printf("\t\t\t");

system("pause");

break;

case 4:

printf("\t\t\tinsert a record");

n=insert_a_record(stu,n); 插入一条记录*/

printf("\t\t\t");

system("pause");

break;

case 5:

printf("\t\t\tdelete a record");

n=delete_a_record(stu,n); 按姓名查找,删除一条记录*/

printf("\t\t\t");

system("pause");

break;

case 6:

printf("\t\t\tquery");

query_a_record(stu,n); 查找并显示一个记录*/

printf("\t\t\t");

system("pause");

break;

case 7:

printf("\t\t\tstatistic");

statistic(stu,n); 新增功能,输出统计信息*/

printf("\t\t\t");

system("pause");

break;

case 8:

printf("\t\t\tadd records from a text file");

n=addfromtext(stu,n); 新增功能,输出统计信息*/

break;

case 9:

printf("\t\t\twrite to a text file");

writetotext(stu,n); 循环写入数据*/

printf("\t\t\t");

system("pause");

break;

case 0:

printf("\t\t\th**e a good luck,bye-bye!");结束程序*/

printf("\t\t\t");

system("pause");

exit(0);

四、函数调用关系图。

注:“→代表调用。

input函数。

打印链表记录。

display函数。

输入若干条记录。

menu_select()函数。

选择菜单。sort_by_num函数。

显示所有记录。

delete_a_record函数。

按姓名查找,删除一条记录。

query_a_record查找并显示一条记录。

statistic函数。

输出统计信息 (新增)

addfromtext函数。

从正文中添加数据到结构体数组中。

main函数。

insert_a_record插入一条记录。

writetotext函数将所有数据写入文件中。

退出程序。reverse(head)函数。

按学号排序。

五、设计测试流程。

1、进入界面。

2、输入选项1,回车;

按提示输入数据:

3、回到主菜单;

输入选项7,回车;

输入文件名:回车;

出现成功提示,则读入文件操作成功。

4、回到主菜单,输入2,回车。

每10个暂停显示数据。

5、回到主菜单,输入3,回车。

出现排序成功信息。

6、回到主菜单,输入4,回车。

按提示插入一组数据。

7、回到主菜单,输入5,回车。

按提示输入姓名,删除数据。

出现删除成功的信息。

8、回到主菜单,输入6,回车。

输入姓名进行查询。

9、回到主菜单,输入7,回车。

出现统计信息。

10、回到主菜单,输入9,回车。

输入回车。出现成功写入文件的信息。

11、回到主菜单,输入0,回车退出系统

c语言课程设计报告 课程设计报告

周口师范学院。课程设计报告。院 系 计算机科学与技术学院 班级。学生姓名学号。设计题目 职工工资管理系统。完成日期 年月日 课程设计任务书。设计题目 工资管理系统 教研室主任指导教师 年月日。摘要11设计内容 任务及具体要求2 1.1设计内容2 1.2设计任务及具体要求2 2概要设计3 2.1该系统...

C语言课程设计报告

华中科技大学计算机科学与技术学院。题目 专业 班级 学号 姓名 成绩 指导教师 完成日期 2016年月日。目录。一 系统需求分析 1 二 总体设计 2 三 数据结构设计 3 四 详细设计 4 五 系统实现 5 六 运行测试与结果分析 6 七 总结 7 八 参考文献 8 九 指导教师评语 9 对所要解...

C语言课程设计报告

c语言。课程设计。商业销售管理系统。学号 121407210 姓名 宋军。班级 软件1202 指导老师 邹姝稚。成绩 2013年6月。一 任务描述。编写一个商品销售管理系统,是其能够拥有商品买卖和库存管理功能。在顾客选购时,需给出输入商品名称,或商品型号,或选择列表进而输入商品编号三种选择,在顾客选...