您的位置:首页 > 编程语言 > C语言/C++

C语言课程设计 管理系统

2011-05-25 18:25 591 查看
哈哈 这是我一年前做的课程设计 虽然感觉很烂 但是很有纪念意义 这里面除了代码部分 其他全是我喜欢的那个人帮我写的 本来我们是打算合作的 结果她做了一个有界面的 我很不争气的做了个控制台应用程序。。 虽然现在被拒绝了,但想想这些还是感觉很幸福~

课题:做一个管理系统,包含以下功能

实现如下功能:
(1)建立登陆系统
(2)建立学生信息的结构体
(3)学生信息的初始化(可以从文件获取)
(4)建立保存文件的置空
(5)学生信息的添加、查找、修改、删除
(6)学生信息的输出
(7)将学生信息保存为文件

1、课程设计目的
本课程设计的目的就是要通过一次集中的强化训练,使学生能及时巩固已学的知识,补充未学的但又必要的内容。进行课程设计目的在于加深对程序设计基础中基础理论和基本知识的理解,促进理论与实践的结合,进一步提高程序设计的能力。具体目的如下:
1.使学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。
2.培养学生综合运用所学知识独立完成课题的能力。
3.培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。
4.提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。
5.培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。
6.对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。

2、课程设计要求
实现如下功能:
(1)建立登陆系统
(2)建立学生信息的结构体
(3)学生信息的初始化(可以从文件获取)
(4)建立保存文件的置空
(5)学生信息的添加、查找、修改、删除
(6)学生信息的输出
(7)将学生信息保存为文件

三、设计题目分析
3.1 题目简介
1.信息的输入:建立学生档案文件。
2.信息维护:

添加:增加新学生;

修改:学生信息的改变;

删除:学生减少;
置空:保存的档案文件的清空(慎用)。
3.信息处理

按要求检索学生信息;
3.2 设计要求
综合应用数组、指针、结构体、文件等,对该设计题目进行设计和实现。课程设计完成后,提交课程设计报告。

四、课程设计内容
4.1 总体设计:



4.2 详细设计:
定义形式/名称
含义/作用
数组
char name[20]
定义姓名数组
结构体
struct student stu[100]
声明一个结构数组
全局变量
int i=0;
数组的控制参数
文件
data.txt
保存学生信息
界面函数
login welcome function subfunction
登陆 欢迎
主函数
次函数
程序函数
search
create edit cancel
exit read clear
save
查找、新增、修改、删除、退出、读取、置空、保存
void welcome(); 欢迎界面
void function(); 主功能函数
void subfunction(int); 次功能函数
void read(); 从文件中读取数据
void create(); 创建一个新的记录
void search(); 搜索一条记录
void edit(int); 编辑一条记录兼编辑功能界面
void cancel(int);
删除一条记录
void save(); 存储一条记录
void clear(); 重置所有记录
void login(); 登陆界面及密码功能

4.3 调试与测试:
(1).getchar();这是一个相当不好的函数;
在switch();函数前读入字符char c=getchar(); 每次读入字符后回车这个确认操作也会当做输入的字符存入缓存区,解决方法是:
char c=getchar();
char d=getchar();
用后者来吞掉一个回车,但是这只能解决第一次输入的问题,当界面再次返回到该选择时由于无法清除缓存区的数据,输入会出现错误。
预想的解决方案是每次getchar();前加入一个清除缓存区的操作;
我使用的解决方案是将getchar();函数换做是scanf();函数来读入字符;
但是scanf();函数也有很多问题,比如输入字母时他就会刷屏,只能强行关闭;我本来想设置输入限制的操作,但是测试起来还是有问题,由于时间的限制,最后只保留对输入错误数字报错有报错功能。

(2).当程序在读取文件时我遇到了文件到末尾无法停止的问题,这个问题直接导致我开辟的数组全部被用完,在经过多种控制都无法实现的情况下我在《C语言程序设计》谭浩强版中找到了feof();函数,可是这个函数也有问题,每次读入数据时都会多读一组,导致浪费一个数组,在存储时又无法对应,解决方案是加上i--语句,虽然不知道出问题的原因,但是可以实现功能(可能是由于函数内在运行顺序不同导致的)

(3).调试结果事儿正确时而错误。由于我本次试验用的是visual studio 2008 全新的操作界面我十分不熟悉 当我这次实验结束时我才总结出 调试程序时最好用ctrl+F5调试 他会显示调试成功和失败 成功则没有问题 失败的话他会自动运行上一次成功调试的文件 只有将源文件改正确才会运行本次修改的文件
而F5或者直接按界面上的调试按钮则会没有提示直接进行上述操做 会很不方便。在调试程序的时候由于单步运行操作在进行过程中会打开其他文件,不断的打开调用导致运行很不方便,所以我只能用printf();语句到处打印出我想要知道的变量的值,不过这个方法还是挺效率的。

5、设计心得与总结:编程序是个很累的过程,很容易犯困,所以编程序一定要耐得住寂寞。在这次设计中我觉得我很好的运用到了我以前学过的只是去解决问题而不是去资料上找可以直接解决该问题的函数,这个使我十分有成就感。以后的编程可能就不会这样去浪费时间了,这对我来说是一次很好的体验。在这个集中的一个星期的编程过程中我觉得我感受到的东西比老师在课堂上一个学期传授的都要多,不仅如此,在遇到问题自己想办法去解决时,我的自主学习能力大大的提高了。总体设计很重要,我在一开始逻辑还不是很清晰的时候就开始编程了,这导致我每次实现局部功能后为了配合大局而删改代码做了许多的无用功,这种情况要在下次的程序设计中避免。

源代码:

//================================================================================
// 信息管理体统
// 网络工程c语言课程设计
// 2010年月
// 用户名admin
// 密码123456
//================================================================================

//编译预处理
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 20

//结构体的定义
struct student{
char name[25];
char id[10];
char sex[10];
char age[10];
char major[20];
char information[100];
}stu
;

//函数的声明
void welcome();
void function();
void subfunction(int);
void read();
void create();
void search();
void edit(int);
void cancel(int);
void save();
void clear();
void login();

//全局变量的定义
int i=0;

//主函数
int main(){
login();
function();
return(0);
}

//欢迎界面
void welcome(){
printf("******************************************************************************/n");
printf("/t/t/t 欢迎来到信息管理系统/n/n");
printf("data.txt正在导入...请稍等.../n/n");
read();//读取
}

//主功能主界面
void function(){
printf("******************************************************************************/n");
printf("1-->新增/n");
printf("2-->查找/n");
printf("3-->存储/n");
printf("4-->重置/n");
printf("0-->退出/n");
printf("******************************************************************************/n");
printf("请选择操作/n");
//功能选择的实现
int c;
scanf("%d",&c);
switch(c){
case 1:create();break;
case 2:search();break;
case 3:save();function();break;
case 4:clear();function();break;
case 0:exit(0);break;
default:printf("输入错误!正在返回.../n");function();break;
}

}

//次功能提示界面
void subfunction(int k){
printf("******************************************************************************/n");
printf("1-->编辑/n");
printf("2-->删除/n");
printf("3-->存储/n");
printf("4-->返回/n");
printf("5-->查找/n");
printf("0-->退出/n");
printf("******************************************************************************/n");
printf("请选择操作/n");

int c;
scanf("%d",&c);
//次功能选择的实现
switch(c){
case 1:edit(k);break;
case 2:cancel(k);function();break;
case 3:save();subfunction(k);break;
case 4:function();break;
case 5:search();break;
case 0:exit(0);break;
default:printf("输入错误!正在返回.../n");subfunction(k);break;
}
}

//读取文件到内存
void read(){
FILE *fp;
fp=fopen("data.txt","r");

//文件是否正常打开
if(fp==NULL){
printf("对不起,文件不存在!/n/n");
printf("******************************************************************************/n");
exit(0);
}

//从文件读取到内存
for(;i<N;i++){
if(feof(fp)) break;
fscanf(fp,"%s",stu[i].name);
fscanf(fp,"%s",stu[i].id);
fscanf(fp,"%s",stu[i].sex);
fscanf(fp,"%s",stu[i].age);
fscanf(fp,"%s",stu[i].major);
fscanf(fp,"%s",stu[i].information);
}
i--;
fclose(fp);
}

//创建以及添加
void create(){

printf("请输入姓名:/n");
scanf("%s",stu[i].name);

printf("请输入学号:/n");
scanf("%s",stu[i].id);

printf("请输入性别:/n");
scanf("%s",stu[i].sex);

printf("请输入年龄:/n");
scanf("%s",stu[i].age);

printf("请输入专业:/n");
scanf("%s",stu[i].major);

printf("请输入备注:/n");
scanf("%s",stu[i].information);

i++;//全局变量的自增
function();
}

//查询功能的实现
void search(){

//输入学号搜索
printf("请输入学号:/n");
char number[10];
scanf("%s",number);
int k;
for(k=0;k<=i;k++)
if(!strcmp(stu[k].id,number)){
printf("姓名:");
printf("%s",stu[k].name);
printf("/n");

printf("学号:");
printf("%s",stu[k].id);
printf("/n");

printf("性别:");
printf("%s",stu[k].sex);
printf("/n");

printf("年龄:");
printf("%s",stu[k].age);
printf("/n");

printf("专业:");
printf("%s",stu[k].major);
printf("/n");

printf("备注:");
printf("%s",stu[k].information);
printf("/n");

break;
}
if(stu[k].id[0]=='/0')
printf("您查找的信息不存在或已删除,请重新查找/n");
subfunction(k);
}

//文件的删除
void cancel(int k){
stu[k].name[0]='/0';
stu[k].id[0]='/0';
stu[k].sex[0]='/0';
stu[k].age[0]='/0';
stu[k].major[0]='/0';
stu[k].information[0]='/0';
printf("文件已删除!/n");

}

//文件的修改
void edit(int k){

printf("请问要编辑哪项?/n");
printf("******************************************************************************/n");
printf("1-->姓名/n");
printf("2-->学号/n");
printf("3-->性别/n");
printf("4-->年龄/n");
printf("5-->专业/n");
printf("6-->备注/n");
printf("0-->返回/n");
printf("******************************************************************************/n");
printf("请选择操作/n");

int c;
scanf("%d",&c);
//功能选择的实现
switch(c){
case 1:printf("请输入姓名:/n");scanf("%s",stu[k].name);save();break;
case 2:printf("请输入学号:/n");scanf("%s",stu[k].id);save();break;
case 3:printf("请输入性别:/n");scanf("%s",stu[k].sex);save();break;
case 4:printf("请输入年龄:/n");scanf("%s",stu[k].age);save();break;
case 5:printf("请输入专业:/n");scanf("%s",stu[k].major);save();break;
case 6:printf("请输入备注:/n");scanf("%s",stu[k].information);save();break;
case 0:subfunction(k);break;
default:printf("输入错误!正在返回/n");subfunction(k);break;
}
subfunction(k);
}

//文件的存储
void save(){
FILE *fp;
fp=fopen("data.txt","w+");
int j;
for(j=0;j<i;j++){
fprintf(fp,"%s",stu[j].name);
fprintf(fp,"/n");

fprintf(fp,"%s",stu[j].id);
fprintf(fp,"/n");

fprintf(fp,"%s",stu[j].sex);
fprintf(fp,"/n");

fprintf(fp,"%s",stu[j].age);
fprintf(fp,"/n");

fprintf(fp,"%s",stu[j].major);
fprintf(fp,"/n");

fprintf(fp,"%s",stu[j].information);
fprintf(fp,"/n");
}
fclose(fp);
printf("文件已存储!/n");
}

//文件的重置
void clear(){
int j;
for(j=0;j<=i;j++){
stu[j].name[0]='/0';
stu[j].id[0]='/0';
stu[j].sex[0]='/0';
stu[j].age[0]='/0';
stu[j].major[0]='/0';
stu[j].information[0]='/0';
}
printf("文件已重置!/n");
}

void login(){
char strname[10];
char strcode[10];
char strname1[10]="admin";
char strcode1[10]="123456";
int j=0,d=0;
char c;
printf("******************************************************************************/n");
printf("/t/t/t/t信息管理系统/n");
printf("/t/t/t/t 请登录/n");
while(j<3)
{
printf("/t/t/t/t请输入用户名:/n/t/t/t/t ");
int a,b;
for(a=0;(c=getchar())!='/n';a++)
strname[a]=c;
strname[a]='/0';
printf("/t/t/t/t请输入密码:/n/t/t/t/t ");
for(b=0;(c=getchar())!='/n';b++)
strcode[b]=c;
strcode[b]='/0';

if (!strcmp(strname,strname1)==0||!strcmp(strcode,strcode1)==0)
printf("/t/t/t 用户名或密码错误!/n/n");
else{
d=1;
break;

}
j++;
}
if(d==1) welcome();
else if(d==0) exit(0);
}

//登陆控制
把文件夹中的data文件删除
最小化文件夹
运行文件
3次输入密码错误
退出

//登陆功能及文件不存在的情况
输入用户名和密码
进入 显示文件不存在

//错误输入的控制 读取 修改 删除 和重置功能
将data文件拉入文件夹
进入文件后输入9显示从新输入
搜索
修改001 姓名改成俞斌
删除002 查找002显示不存在 保存后再看文件
创建004 查找本身 保存后看文件
返回后重置文件 先查询 保存看文件的效果

没有搜索到数据的时候不要编辑和删除
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: