软件设计报告
院系名称 : 专业名称 : 班 级 : 班内序号 : 学生姓名 : 指导教师 : 时
题 目:
电子工程学院 电子信息工程
电子0902
间 : 2010年6月21日 至2010年7月2日
一、 课程设计目的
(一)通过本课程设计,强化上机动手能力,使学生在理论和实践的基础上进一步巩固《C 语言程序设计》课程学习的内容,掌握工程软件设计的基本方法。
(二)学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。 (三)为后续各门计算机课程的学习打下坚实基础,为毕业设计和以后工作打下必要基础。 二、课程设计内容
编写一个宿舍管理系统。通过该系统完成对学生信息的录入、输出、删除、修改、添加、宿舍卫生情况排名,并给系统设置了密码,若密码输入错误,则不能进入系统。 三、需求分析
系统代码要能够对学生信息进行录入、输出、删除、修改、添加、宿舍卫生情况排名 四、概要设计
1
2(1)输入模块:输入学生信息
(2)输出模块:进行学生信息的输出
(3)修改模块:对需要修改的信息的学生信息进行修改 (4)删除模块:对需要删除的学生信息进行删除 (5)排序模块:对学生宿舍的卫生得分进行排名 (6)保存文件模块:退出系统时,保存学生信息
(7)密码设置模块:给系统设置密码,若密码错误,则不能进入系
统。
(8)添加信息模块:按要求在系统中进行学生信息的添加 五、详细设计及运行结果
各模块功能图示: 密码设置模块:给系统设置密码,若密码错误,则不能进入系统。
输入模块:输入学生信息
输出模块:
修改模块:对需要修改的信息的学生信息进行修改
删除模块:对需要删除的学生信息进行删除
排序模块:对学生宿舍的卫生得分进行排名
函数之间相互调用的图示:
运行结果:
六、调试情况,设计技巧及体会
1、对自己设计进行评价,指出合理和不足之处,提出改进的方案。 评价:
(1)优点:该系统能够快速完成对学生信息的录入、输出、删除、修改、添加、宿舍卫生情况排名,并给系统设置了密码,若密码输入错误,则不能进入系统。
(2)缺点:未对学生信息进行详细的统计
改进方案:在系统的代码中加入对学生信息进行统计的代码 2、在设计过程中的感受
做任何事都要有耐心,不能急躁。干任何事(包括学知识)都要注意细节。注意数组元素的定义。…… 七、参考文献
《C 语言程序设计》 王曙燕 曹锰 科学出版社 2005年2月 《C 语言程序设计》 谭浩强 清华大学出版社 1999年12月 《C 语言程序设计教程》 张毅坤 曹锰 张亚玲 西安交通大学 出版社
八、附录:源代码
(略,详见电子版实验报告) #include #include #include #include #include #define L #define N
200 1000
#define PAGE 100 /*日期结构体类型*/ struct d_type { };
int year; int month; int day;
/*学生信息结构体类型*/ struct st_type { };
struct st_type student[N];
/*读文件模块*/ int read_file(struct st_type student[]) {
FILE *fp; int i=0;
if((fp=fopen("D:\\student.txt","rt"))==NULL) {
printf("\n\n*******库存文件不存在!请新建:\n"); exit(0);
int num;
/*学号*/
/*姓名*/ /*入学时间*/
char name[10];
struct d_type date; int num1; int num2;
/*宿舍楼号*/ /*宿舍号*/
/*所属院系*/
char *acad;
}
while(feof(fp)!=1) { } fclose(fp); return i; fread(&student[i],sizeof(student),1,fp); if(student[i].num ==0) break; else i++;
/*保存文件模块*/
void save_file(struct st_type student[],int sum)
{
FILE *fp; int i; if((fp=fopen("D:\\student.txt","wt"))==NULL) { printf("读文件错误!\n");
}
} for(i=0;i
/*求总的宿舍数*/
int max_st(int m)
{
int x,y; int count; x=m/6; y=m%6; if(y!=0) count=x+1; else count=x;
}
/*输入学生信息模块*/
int input(struct st_type student[])
{
int i=0; system("cls"); printf("\n\n printf(" do { printf("\n printf("\n 第%d个学生",i+1); 学号:"); 输入学生信息(最多%d个)\n",N); ------------\n"); scanf("%d",&student[i].num); if(student[i].num==0) break; flushall(); printf("\n 姓名:"); scanf("%s",&student[i].name); flushall();
printf("\n 入学时间(如:2010-6-6):"); scanf("%d-%d-%d",&student[i].date.year,&student[i].date.month,
&student[i].date.day);
flushall();
printf("\n 宿舍楼号:");
scanf("%d",&student[i].num1);
flushall();
printf("\n 宿舍号:");
scanf("%d",&student[i].num2);
flushall();
printf("\n 所属院校:");
scanf("%s",&student[i].acad);
flushall();
i++;
}
while(i
printf("\n ------%d个学生信息输入完毕!
printf("\n 按任意键返回主菜单!");
getch();
return i;
--------\n",i);
/*输出学生信息模块*/
void output(struct st_type student[],int sum)
{
FILE *fp; int i=0,j=0,page=1; if((fp=fopen("D:\\student.txt","wt"))==NULL) { } for(i=0;i
printf("--------------------------------------------\n"); do
if(student[i].num!=0) { j++; if((j%PAGE)!=0) { printf(" %d %4s %4d-%d-%d %6d %6d %7c",student[i].num,student[i].name,
student[i].date.year,student[i].date.month, student[i].date.day,student[i].num1,student[i].num2, student[i].acad); printf("\n"); printf("----------------------------------------------------------\n"); } else { printf("按任意键继续!"); getch(); system("cls");
printf("\n\n-----学生信息表------ 第%d页\n\n",++page);
printf("--学号--姓名--入学时间--宿舍楼号--宿舍号--所属院系--\n");
printf("--------------------------------------------\n"); printf(" %d %4s %4d-%d-%d %6d %6d %7c",student[i].num,student[i].name,
}
student[i].date.year,student[i].date.month, student[i].date.day,student[i].num1,student[i].num2, } } while(student[i].num !=0); printf("按任意键返回主菜单!"); getch(); } i++; } student[i].acad); printf("--------------------------------------------\n");
/*添加学生信息模块*/
void add(struct st_type student[],int sum)
{
int i,choice,add_num,flag; do { scanf("%d-%d-%d",&student[i].date.year,&student[i].date.mont
printf("\n 输入要添加信息学生的学号:"); scanf("%d",&add_num); i=sum+1; if(i
} if(i>=N) { } printf("\n----------------------学生信息------------------------\n"); printf("--学号--姓名----入学时间----宿舍楼号--宿舍号--所属printf("\n getch(); 系统信息已满!不能继续添加!"); &student[i].date.day); flushall(); printf("\n 宿舍楼号:"); scanf("%d",&student[i].num1); flushall(); printf("\n 宿舍号:"); scanf("%d",&student[i].num2); flushall(); printf("\n 所属院校:"); scanf("%s",&student[i].acad); flushall(); printf("已完成一个学生的信息添加!"); 院系--\n");
printf(" %d %4s %4d-%d-%d %6d %6d %7c",student[i].num,student[i].name,
}
student[i].date.year,student[i].date.month,student[i].date.day, } while(flag==1); printf("\n 按任意键返回主菜单!"); student[i].num1,student[i].num2,student[i].acad); 是否继续添加?(Y/N)"); printf("\n\n choice=getch(); if(choice=='Y'||choice=='y') { } else flag=0; flag=1; printf("\n 继续添加!\n"); getch();
/*修改学生信息模块*/
void modify(struct st_type student[],int sum) {
int i=0,modify_num,flag; int choice; do {
/* system("cls");*/
printf("\n
输入要修改信息学生的学号:");
scanf("%d",&modify_num); for(i=0;i
if(student[i].num==modify_num) {
printf("\n--------------------------学
生
信
息
----------------------\n");
printf("--学号--姓名------入学时间----宿舍楼号--宿舍号--
所属院系--\n");
printf(" %d %4s %4d-%d-%d %6d %6d %7c",stud
printf("--------------------------------------------\n");
ent[i].num,student[i].name, student[i].date.year,student[i].date.month,
student[i].date.day,student[i].num1,student[i].num2,
student[i].acad);
printf("\n 请问你要修改哪一项?\n"); printf("\n 1. 姓名\n"); printf("\n 2. 学号\n"); printf("\n 3. 入学时间\n"); printf("\n 4. 宿舍楼号\n"); printf("\n 5. 宿舍号\n"); printf("\n 6. 所属院系\n"); printf("\n
请选择(1-6):");
scanf("%d",&choice); switch(choice) { case 1: printf("\n 输入修改后的姓名:");
scanf("%d",&student[i].name);
break;
case 2: printf("\n 输入修改后的学号:");
scanf("%d",&student[i].num);
break;
case 3: printf("\n
输入修改后的入学时间:");
,
scanf("%d%d%d",&student[i].date.year,&student[i].date.month
}
&student[i].date.day);
break;
输入修改后的宿舍楼号:");
case 4: printf("\n
scanf("%d",&student[i].num1); break;
输入修改后的宿舍号:");
case 5: printf("\n
scanf("%d",&student[i].num2);
break;
输入修改后的所属院系:");
case 6: printf("\n
scanf("%s",&student[i].acad); break;
printf("\n--------------------学生信息----------------------\n"); printf("--学号--姓名--入学时间--宿舍楼号--宿舍号--所属
院系--\n");
printf(" %d %4s %4d-%d-%d %6d %6d %7c",stud
printf("--------------------------------------------\n");
ent[i].num,student[i].name,
}
}
student[i].date.day,student[i].num1,student[i].num2, student[i].acad);
break;
if(i==sum) { }
printf("\n\n choice=getch();
if(choice=='Y'||choice=='y') { } else
flag=0; flag=1; printf("\n
继续修改!\n");
是否继续修改?(Y/N)");
printf("\n getch();
该学生信息不存在!");
while(flag==1);
printf("\n
按任意键返回主菜单!");
}
/*删除学生信息模块*/
void dell(struct st_type student[]) {
FILE *fp; int i=0,dell_num;
fp=fopen("D:\\code\\student.txt","r"); if(fp == NULL) { }
while(feof(fp)!=1) {
fread(&student[i],sizeof(student),1,fp); if(student[i].num ==0)
break;
printf("\n\n*****库存文件不存在!"); exit(0);
else i++;
}
printf("\n请输入要删除学生信息的学生的学号:"); scanf("%d",&dell_num); if(dell_num==student[i].num)
printf("请删除该学生的信息!");
system("cls"); fclose(fp);
printf("information deleted!\n"); getch();
/*学生宿舍卫生情况信息排名模块*/ void sort(struct st_type student[],int count) {
int i,j,t;
int score[L]; for(i=1;i
printf(" %d ",score[i]); scanf("%d",score+i);
}
for(i=1;i
}
for(i=1;i
printf("output %d",score[i]);
}
/*主函数*/ void main() { int sum,count; int choice; char num[10];
printf(" ^_^你好!^_^^_^请输入密码!^_^\n");
欢迎登陆本系统!
^_^\n^_^
scanf("%s",num);
if(strcmp(num,"05091050")!=0)
{ printf("^_^^_^^_^密码输入错误!请重新输入!谢谢!
^_^^_^^_^\n");
goto END; } else
printf("^_^密码输入正确!^_^进入系统!^_^系统登陆中!
^_^");
sum=read_file(student); if(sum==0) {
printf("*********^_^请录入基本库存信息!
^_^*********\n");
printf("*********^_^按任意键开始录入学生基本信息!
^_^*********\n"); }
count=max_st(sum); do
getch();
sum=input(student);
system("cls");
printf("*************************************************
**********************\n");
printf("^_^^_^^_^^_^^_^^_^你好!欢迎进入学生宿舍管理
系统!^_^^_^^_^^_^^_^^_^^_^\n");
printf("*************************************************
**********************\n");
printf("^_^ printf("^_^ printf("^_^ printf("^_^ printf("^_^
1. 添加学生信息^_^\n"); 2. 修改学生信息^_^\n"); 3. 删除学生信息^_^\n"); 4. 查询并输出学生信息^_^\n"); 5. 学生宿舍卫生情况信息排名
^_^\n");
printf("\n\n*************^_^^_^^_^^_^^_^^_^^_^^_^^_^^_
printf("^_^
0. 退出该系统^_^\n");
^^_^^_^^_^*************\n\n");
printf("
请选择(0-5):");
scanf("%d",&choice);
switch(choice) { case 1: add(student,sum);
case 2: modify(student,sum); case 3: dell(student);
case 4: output(student,sum);
case 5: sort(student,count);
case 0:
}
}while(choice!=0); save_file(student,sum);
}
break;
break;
break;
break; break;
break;