C
课题:学生信息管理系统设计
报告人:阮家友方鹏飞叶成
指导老师: 严碧波 孙祥娥
报告日期:2014年6月23日
C语言课程设计实验报告
1.设计目的:
学生信息管理系统设计
学生信息包括:学号、姓名、年龄、电话号码、性别、出生年月、QQ、班级等。试设计一学生信息管理系统,使之能提供以下功能:
1. 系统以菜单方式工作
2. 学生信息添加功能---输入
3. 查询功能---算法
按学号查询
按姓名查询
4. 学生信息的删除与修改
5. 学生信息整表浏览功能---输出
2.总体设计:
程序设计组成框图
流程图
3.详细设计:
1>函数入口说明
menu() 输出主菜单
load_info() 载入函数:txt转为链表
add_info(STU*h) 增加学生信息
search_info(STU*h,int type) 搜索学生信息
delete_info(STU*h) 删除学生信息
update_info(STU*h) 修改学生信息
output_info(STU*h) 输出学生信息
preview_info(STU*h,int type) 预览学生信息
main() 主函数
2>调用关系
3>参数说明
add_info(STU*h) 、delete_info(STU*h) 、output_info(STU*h) 、preview_info(STU*h,int type) 、search_info(STU*h,int type) 、update_info(STU*h) 、函数中的STU*h为传入的链表节点指针,type为搜索的方式:1为输出传入节点指针的一条学生记录,2为输出所有的学生记录。
4.调试与测试:
1>调用STU * load_info()函数(文件载入),读写出现乱码
解决方法:更改相应指针指向,及有关变量的初值设置。
2>边界测试
解决方法:用极端的或偏门的情况来探测和验证代码在处理时会发生什么。
3>执行窗口执行多次命令后显示过多,不利于输入指令及结果查看
解决方法:调用系统清屏函数system("cls");。
4>文件在打开和保存时有问题。
解决方法:调整文件的打开方式,从原来的单纯的w+修改为添加一个if语句,当没有文件时执行w+的操作,否则执行r+。避免了原存储文件被覆盖的问题。
5.源程序清单和执行结果:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//学生信息 结构体
typedef struct record{
char No[10];
char name[12];
unsigned int age;
char sex[4];
char birth[10];
char qq[12];
char grade[20];
char phone[11];
struct record *next;
}STU;
//菜单函数
int menu();
//载入函数:txt转为链表
STU * load_info();
//增加学生
STU * add_info(STU *h);
//搜索函数
STU * search_info(STU *h,int type);
//删除学生
STU * delete_info(STU *h);
//修改学生信息
void update_info(STU *h);
//输出信息
void output_info(STU *h);
//预览信息
void preview_info(STU *h,int type);
void main()
{
STU *header=NULL,*sear=NULL;int cmd=1;
system("title 学生信息管理系统");
//system("mode con cols=48 lines=25");
system("date /T");
system("TIME /T");
system("color 3E");
header=load_info();
//preview_info(header,2);
cmd=menu();
while(cmd!=0)
{
switch(cmd)
{
case 0:break;
//添加信息
case 1:
header=add_info(header);output_info(header);
break;
//学号查询
case 2:
sear=search_info(header,1);
if(sear!=NULL)
{
preview_info(sear,1);
}
else
printf("该学生不存在!\n");
sear=NULL;
break;
//姓名查询
case 3:
sear=search_info(header,2);
if(sear!=NULL)
{
preview_info(sear,1);
}
else
printf("该学生不存在!\n");
sear=NULL;
break;
//按学号删除
case 4:
header=delete_info(header);
output_info(header);
break;
//修改
case 5:
update_info(header);
output_info(header);
break;
//整表输出
case 6:
preview_info(header,2);
break;
default:
printf("无效的命令!\n请重新输入命令!\n");
break;
}
if(cmd!=0)
cmd=menu();
}
}
int menu()
{
int cmd=0;
printf("\n请输入命令:\n\t0:结束程序!\n\t1:添加记录!\n\t2:按学号查询!\n\t3:按姓名查询!\n\t4:按学号删除信息!\n\t5:按学号修改信息!\n\t6:整表浏览!\n");
scanf("%d",&cmd);
while(cmd<0 || cmd>9)
{
printf("无效的命令!\n请重新输入:\n");
scanf("%d",&cmd);
}
return cmd;
}
STU * load_info()
{
FILE *fp=fopen("d:\\stu.txt","r+"),*fpNew=NULL;
STU *h=NULL,*q=NULL,*p=NULL;char ch='0';
h=(STU *)malloc(sizeof(STU));
if(fp==NULL)
{
fpNew=fopen("d:\\stu.txt","w");
fclose(fpNew);
return NULL;
}
rewind(fp);
ch=fgetc(fp);
if(ch==EOF)
{
return NULL;
}
else
{
rewind(fp);
fscanf(fp,"%10s %12s %3d %11s %4s %10s %12s %20s",h->No,h->name,&h->age,h->phone,h->sex,h->birth,h->qq,h->grade);
q=h;
q->next=NULL;
}
ch=fgetc(fp);
while(ch!=EOF)
{
p=(STU *)malloc(sizeof(STU));
p->next=NULL;
fscanf(fp,"%10s %12s %3d %11s %4s %10s %12s %20s",p->No,p->name,&p->age,p->phone,p->sex,p->birth,p->qq,p->grade);
ch=fgetc(fp);
q->next=p;
q=q->next;
}
fclose(fp);
return h;
}
STU * add_info(STU *h)
{
FILE *fpin=fopen("d:\\stu.txt","a");
STU *stu,*p;
p=h;
stu=(STU *)malloc(sizeof(STU));
stu->next=NULL;
system("cls");
if(h==NULL)
{
h=stu;
printf("请输入学号:\n");
scanf("%s",h->No);
printf("请输入姓名:\n");
scanf("%s",h->name);
printf("请输入年龄:\n");
scanf("%d",&h->age);
printf("请输入手机号:\n");
scanf("%s",h->phone);
printf("请输入性别:\n");
scanf("%s",h->sex);
printf("请输入出生年月日:\n");
scanf("%s",h->birth);
printf("请输入qq:\n");
scanf("%s",h->qq);
printf("请输入班级:\n");
scanf("%s",h->grade);
}
else
{
while(p->next!=NULL)
{
p=p->next;
}
p->next=stu;
printf("请输入学号:\n");
scanf("%s",stu->No);
printf("请输入姓名:\n");
scanf("%s",stu->name);
printf("请输入年龄:\n");
scanf("%d",&stu->age);
printf("请输入手机号:\n");
scanf("%s",stu->phone);
printf("请输入性别:\n");
scanf("%s",stu->sex);
printf("请输入出生年月日:\n");
scanf("%s",stu->birth);
printf("请输入qq:\n");
scanf("%s",stu->qq);
printf("请输入班级:\n");
scanf("%s",stu->grade);
}
fclose(fpin);
return h;
}
STU * delete_info(STU *h)
{
STU *p,*q;
char no[11];
p=h;
if(p==NULL)
{
printf("\t目前还没有信息记录!\n");
return NULL;
}
else
{
printf("请输入一个学号:\n");
scanf("%s",no);
q=p->next;
if(strcmp(h->No,no)==0)
{
printf("该学生信息已删除!\n");
h=h->next;
}
else
{
while(q!=NULL)
{
if(strcmp(q->No,no)==0)
{
printf("\t该学生的信息已删除!\n");
p->next=q->next;
return h;
}
else
{
p=q;
q=q->next;
}
}
printf("该学生不存在!\n");
}
return h;
}
}
STU * search_info(STU *h,int type)
{
STU *p_temp=NULL,*q=h;
p_temp=(STU *)malloc(sizeof(STU));
system("cls");
switch(type)
{
case 1:
printf("\t请输入一个学号:\n\t");
scanf("%s",p_temp->No);
while(q!=NULL)
{
if(strcmp(q->No,p_temp->No)==0)
return q;
else
q=q->next;
}
return NULL;
break;//按学号查询
case 2:
printf("\t请输入一个名字:\n\t");
scanf("%s",p_temp->name);
while(q!=NULL)
{
if(strcmp(q->name,p_temp->name)==0)
return q;
else
q=q->next;
}
return NULL;
break;//按姓名查询
default:return NULL;break;
}
}
void update_info(STU *h)
{
STU *q=NULL;
unsigned int cmd=1,rec=1;
system("cls");
while(rec!=0)
{
q=search_info(h,1);
if(q==NULL)
printf("\t该学生不存在,无法进行修改操作!\n");
else
{
cmd=1;
while(cmd!=0)
{
system("cls");
preview_info(q,1);
printf("\n\t0:修改完成,回主菜单!\n\t1:修改该学生姓名!\n\t2:修改该学生年龄!\n\t3:修改该学生手机号!\n\t4:修改该学生性别!\n\t5:修改该学生生日!\n\t6:修改该学生qq号!\n\t7:修改该学生班级!\n\t8:修改下一个!\n");
printf("请输入命令:\n\t");
scanf("%d",&cmd);
switch(cmd)
{
case 0:cmd=0;rec=0;break;
case 1:
printf("\t请输入学生新的姓名:\n\t");
scanf("%s",q->name);
break;
case 2:
printf("\t请输入学生新的年龄:\n\t");
scanf("%d",&q->age);
break;
case 3:
printf("\t请输入学生新的手机号:\n\t");
scanf("%s",q->phone);
break;
case 4:
printf("\t请输入学生新的性别:\n\t");
scanf("%s",q->sex);
break;
case 5:
printf("\t请输入学生新的生日:\n\t");
scanf("%s",q->birth);
break;
case 6:
printf("\t请输入学生新的qq号:\n\t");
scanf("%s",q->qq);
break;
case 7:
printf("\t请输入学生新的班级:\n\t");
scanf("%s",q->grade);
break;
case 8:
cmd=0;
break;
}//switch结束
}//内层while结束
}
}//外层while结束
}//函数结束
void output_info(STU *h)
{
FILE *fpin=fopen("d:\\stu.txt","w");
STU *q=NULL;
q=h;
if(q!=NULL)
{
fprintf(fpin,"%-10s %-12s %4d %11s %-4s %-8s %-11s %20s",q->No,q->name,q->age,q->phone,q->sex,q->birth,q->qq,q->grade);
q=q->next;
}
while(NULL!=q)
{
fprintf(fpin,"\n%-10s %-12s %4d %11s %-4s %-8s %-11s %20s",q->No,q->name,q->age,q->phone,q->sex,q->birth,q->qq,q->grade);
q=q->next;
}
fclose(fpin);
}
void preview_info(STU *h,int type)
{
STU *p=NULL;
p=h;
system("cls");
switch(type)
{
case 1:
printf("=================================");
printf("\n该学生的完整信息为:\n\t学号:%-10s\n\t姓名:%-12s\n\t年龄:%-4d\n\t电话:%-11s\n\t性别:%-4s\n\t生日:%-s\t\n\tQQ号:%s\t\n\t班级:%-s\n",h->No,h->name,h->age,h->phone,h->sex,h->birth,h->qq,h->grade);
printf("=================================");
break;
case 2:
if(p==NULL)
{
printf("文件中没有信息!\n");
break;
}
printf("=================================");
while(p!=NULL)
{
printf("\n\t学号:%-10s\n\t姓名:%-12s\n\t年龄:%-4d\n\t电话:%-11s\n\t性别:%-4s\n\t生日:%-s\t\n\tQQ号:%s\t\n\t班级:%-s\n",p->No,p->name,p->age,p->phone,p->sex,p->birth,p->qq,p->grade);
printf("=================================");
p=p->next;
}
break;
default:break;
}
}
6.实验心得:
1) 对C语言的编程实践有所认识。
2) 在遇到程序调试不通过时,会通过缩小范围的分析来锁定问题所在。
3) 通过这次实验,熟悉了从自然语言转换成伪代码再转换为流程图的过程。
4) 在程序中设定合适的全局变量,可以简化程序的编写难度。
5) 运用函数可以减少编写时的代码量,也使程序条理清晰。
6) 通过本次C语言上机实验,我们对这个介于人类与非人类之间的计算机编程语言有了一定的体验。随着实验的成功与报告的完成,有点微微的成就感使人难忘。伴随着学习的深入,我们发现高深的东西还有很多很多,等待着我们自己去挖掘。对C语言的学习,我们会加倍努力。
数据库课程设计报告指导老师贺亚茹组名组长组员完成日期成绩数据库课程设计报告一项目名称学生信息管理系统二项目需求分析1项目需求分析简…
课设名称学生成绩管理系统院系姓名学号年级专业班级指导教师时间20xx年6月目录第一部分摘要3第二部分目的背景与意义4第三部分需求分…
C程序设计报告书课题名称学号姓名班级指导老师成绩一程序设计目的本课程设计是在学习C基本理论之后的实践教学环节该实践教学是软件设计的…
C语言课程设计报告一问题描述题目七学生成绩管理系统设计学生成绩信息包括学期学号班别姓名四门课程成绩语文数学英语和计算机等主要功能1…
C可视化课程设计学生信息管理系统设计C基于MFC类可视化程序设计报告小组成员赵文琪倪涛学号31307042333130704234…
《C语言程序设计》课程设计报告专业:班级:姓名:指导教师:二零##年十二月二十六日目录一、设计题目2二、设计目的2三、设计内容23…
福建师范大学人民武装学院C语言程序设计报告书设计名称学生成绩管理系统专业软件工程指导老师陈琳姓名黄强学号119xx20xx0262…
学生信息管理系统HUNANUNIVERSITY程序设计训练报告学生姓名学生学号专业班级指导老师院长系主任20xx年5月25日第1页…
实训报告题目学生信息管理系统院系信息科技学院专业电子信息工程姓名殷浩学号1152100135指导教师杨呈永日期20xx年6月26日…
郑州大学实训报告实训名称学生成绩管理系统设计姓名院系软件学院专业班级学号指导教师成绩时间年2月日至年月31日目录实训任务书I实训进…