综合性程序设计试验一
实验名称: 顺序表操作的C程序实现
【目的】
1.利用所学的三种程序基本结构以及数组、用户自定义函数进行一个中型程序的设计,进一步理解和掌握C语言的语法以及三种基本程序结构的综合应用。
2.通过程序中涉及到的排序、查找、求和等操作加深对算法、程序设计思路、常用程序设计技巧的理解与掌握,逐步培养学生的程序开发能力。
【内容】
设某班有n位同学,每位同学的数据包括以下内容:学号、姓名、数学成绩、程序设计成绩。设计程序完成以下五项功能:新建数据档案、添加数据、删除数据、对输入的数据进行排序和查询。
注:
1.输入数据时,要求学号不能相同,姓名可以相同。
2.在学习“结构体”和“文件”之前可进行本项程序设计,采用多个数组存储数据,同一学生信息对应的数组元素应下标相同。
【步骤】
1. 画出程序流程图;
2. 编制程序;
3. 调试程序,对调试程序时出现的错误进行分析,思考导致错误的原因;
4. 写出通过调试并修改后的正确程序代码。
【要求】
1.程序运行时,首先显示主菜单如下:
用户输入序号后,程序进行相应操作。
2.在主菜单中选择序号4,弹出子菜单选择排序方式,子菜单如下:
选择子菜单的序号后,程序能正确运行并在屏幕上显示按要求排序后的相关信息。
3.在主菜单中选择序号5,弹出子菜单选择查询方式,子菜单如下:
在子菜单中选择序号后,程序按以下方式工作。
学号查询:输入学号后,若该学号存在则显示与其相关的所有信息,否则显示找不到的提示信息;
姓名查询:输入姓名后,若该姓名存在则显示与其相关的所有信息,否则显示找不到的提示信息;
按科目查询:输入指定分数,程序运行后显示该科目中考试成绩大于等于指定分数的同学的学号、姓名以及该科成绩并统计满足条件的人数;
总分查询:输入指定分数,程序运行后显示总分成绩大于等于指定分数的同学的学号、姓名以及各科成绩并统计满足条件的人数。
虽然不难。。但是要求多多。。给够200也许有人会动手。。
再说。。。这个好像是作业来的哦。。
mark!!!
没空写。。给个思路:
1.程序运行时,首先显示主菜单如下:用户输入序号后,程序进行相应操作。
//菜单很容易。。就是用一个switch对输入的序号进行判断,如
switch(select)
{
1:do somthing
2:do...
.....
defalult:
}
可以对每一部分用一个函数表示,这样直接调用函数就可以了。。。
设某班有n位同学,每位同学的数据包括以下内容:学号、姓名、数学成绩、程序设计成绩。
学生数据可以用一个结构体进行包装。。然后什么一个类型为该结构体的数组。每个元素表示一个学生。
新建数据档案。。可以用读入文本数据的方法。。或者每个输入。就是用for循环咯。。】
排序方式:对数组排序。。很容易把。。
学号查询:输入学号后,若该学号存在则显示与其相关的所有信息,否则显示找不到的提示信息;
对于输入的学号。。在数组里边逐个对比。。
姓名查询:输入姓名后,若该姓名存在则显示与其相关的所有信息,否则显示找不到的提示信息;
对于输入的姓名。。在数组里边进行逐个对比
按科目查询:输入指定分数,程序运行后显示该科目中考试成绩大于等于指定分数的同学的学号、姓名以及该科成绩并统计满足条件的人数;
总分查询:输入指定分数,程序运行后显示总分成绩大于等于指定分数的同学的学号、姓名以及各科成绩并统计满足条件的人数。
这两个和上面的本质都是一样的。。
注意:。。由于可以添加数据。。可以定义一个足够大的数组。。并且记录学生人数。。这很重要。。
这个不难的嘛,自己动手哦!
也不需要花多久的时间。
mark
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <iomanip.h>
const int MAX=100;
//每位同学的数据包括以下内容:学号、姓名、
//数学成绩、程序设计成绩。
struct STUDENT
{
long id;
char name[20];
int math;
int prog;
};
STUDENT student[MAX];
int num=0;//实际人数
//初始化数据
void init()
{
for(int i=0;i<MAX;i++)
{
student[i].id=0;
// student[i].name="";
student[i].math=0;
student[i].prog=0;
}
}
void print()
{
cout<<setw(10)<<"学号"<<setw(10)<<"姓名"<<setw(10)<<"数学"<<setw(10)<<"程序"<<endl;
for(int i=0;i<num;i++)
{
cout<<setw(10)<<student[i].id;
cout<<setw(10)<<student[i].name;
cout<<setw(10)<<student[i].math;
cout<<setw(10)<<student[i].prog;
cout<<endl;
}
}
//新建学生档案
void newdata()
{
cout<<"请输入学生人数:";
cin>>num;
if(num<=MAX)
{
for(int i=0;i<num;i++)
{
cout<<"请输入第"<<i+1<<"个学生的资料"<<endl;
cout<<"学号:";
cin>>student[i].id;
cout<<"姓名:";
cin>>student[i].name;
cout<<"数学成绩:";
cin>>student[i].math;
cout<<"程序设计成绩:";
cin>>student[i].prog;
}
cout<<"输入完毕!!"<<endl;
print();
}
else
{
cout<<"人数过多,请加大空间!"<<endl;
exit(1);
}
}
//添加学生数据
void adddata()
{
if(num==0)
{
cout<<"尚未建立学生档案,请重新选择!"<<endl;
}
else
{
if(num<MAX)
{
cout<<"请输入第"<<num+1<<"个学生的资料"<<endl;
cout<<"学号:";
cin>>student[num].id;
cout<<"姓名:";
cin>>student[num].name;
cout<<"数学成绩:";
cin>>student[num].math;
cout<<"程序设计成绩:";
cin>>student[num].prog;
num++;
}
else
{
cout<<"空间已经爆满了!";
}
}
}
//删除学生数据
void deldata()
{
long del;
int founded=0;
cout<<"请输入要删除的学生id:";
cin>>del;
for(int i=0;i<num;i++)
{
if(del==student[i].id)
{
student[i].id=student[num-1].id;
strcpy(student[i].name,student[num-1].name);
student[i].math=student[num-1].math;
student[i].prog=student[num-1].prog;
num--;
founded=1;
}
if(founded==0)
{
cout<<"不存在该数据!"<<endl;
}
}
}
//排序
void sort()
{
//对数组a[0]~a[num-1]的id号进行冒泡排序,我就不写了。。
}
//查询
void find()
{
int i,sel;
int founded=0;//是否查到
int tol=0;//查询所得的人数
STUDENT temp;
cout<<"1.学号查询"<<endl;
cout<<"2.姓名查询"<<endl;
cout<<"3.按科目查询"<<endl;
cout<<"4.总分查询"<<endl;
cout<<"请输入进行查询的操作号:";
cin>>sel;
switch (sel)
{
case 1: cout<<"请输入学号:";
cin>>temp.id;
for(i=0;i<num;i++)
{
if(temp.id==student[i].id)
{
cout<<setw(5)<<student[i].id;
cout<<setw(5)<<student[i].name;
cout<<setw(5)<<student[i].math;
cout<<setw(5)<<student[i].prog;
founded=1;
cout<<endl;
}
}
if(founded==0) cout<<"找不到该学生数据"<<endl;
break;
case 2: cout<<"请输入姓名:";
cin>>temp.name;
for(i=0;i<num;i++)
{
if(strcmp(temp.name,student[i].name)==0)
{
cout<<setw(5)<<student[i].id;
cout<<setw(5)<<student[i].name;
cout<<setw(5)<<student[i].math;
cout<<setw(5)<<student[i].prog;
founded=1;
cout<<endl;
}
}
if(founded==0) cout<<"找不到该学生数据"<<endl;
break;
case 3: cout<<"请选择科目:1-数学 2-程序设计";
cin>>sel;
if(sel==1)
{
cout<<"请输入分数:";
cin>>temp.math;
for(i=0;i<num;i++)
{
if(temp.math<=student[i].math)
{
cout<<setw(5)<<student[i].id;
cout<<setw(5)<<student[i].name;
cout<<setw(5)<<student[i].math;
cout<<endl;
tol++;
}
}
cout<<"总人数:"<<tol;
}
else if(sel==2)
{
cout<<"请输入分数:";
cin>>temp.prog;
for(i=0;i<num;i++)
{
if(temp.prog<=student[i].prog)
{
cout<<setw(5)<<student[i].id;
cout<<setw(5)<<student[i].name;
cout<<setw(5)<<student[i].prog;
cout<<endl;
tol++;
}
}
cout<<"总人数:"<<tol;
}
else cout<<"输入错误!"<<endl;
break;
case 4: cout<<"请输入总分:";
//使用temp.math来存储总分
cin>>temp.math;
for(i=0;i<num;i++)
{
if(temp.math<=student[i].prog+student[i].math)
{
cout<<setw(5)<<student[i].id;
cout<<setw(5)<<student[i].name;
cout<<setw(5)<<student[i].math;
cout<<setw(5)<<student[i].prog;
cout<<endl;
tol++;
}
}
cout<<"总人数:"<<tol;
break;
default:cout<<"输入错误!"<<endl;
}
}
int main(void)
{
int sel;//选择的操作
init();
while(1)
{
cout<<"1.新建数据档案"<<endl;
cout<<"2.添加数据"<<endl;
cout<<"3.删除数据"<<endl;
cout<<"4.对输入的数据进行排序"<<endl;
cout<<"5.对输入的数据进行查询"<<endl;
cout<<"6.退出";
cout<<"请选择所需功能:(序号)";
cin>>sel;
switch(sel)
{
case 1: newdata();break;
case 2: adddata();break;
case 3: deldata();break;
case 4: sort();break;
case 5: find();break;
case 6: exit(1);
default: cout<<"输入错误,请重新输入:"<<endl;
}
}
return 0;
}
。。已经完成了大部分功能。。除了排序。。
还有。。没有进行id是否重复的判断。。而且输入格式方面还有问题。。。。都差不多了。。其他的你自己弄拉。。
好奇怪的题目啊,
你去问问老师"中型的程序"是多大,我用30000行实现一个操作系统,算不算中型的?
楼上厉害。。。。。。。。。。。。。。。。
佩服
30000行...
得写多久啊...
一天100行计算,得写个一年来着...
恩,这样算下来,才 1人年,是个小型系统...
效率恐怕没有这么高。我们公司做底层开发的平均组织效率是每人每天25行左右,考虑我就一个人,交流所占的时间基本没有,效率有所提高,所以按照每天30行计算
恩,你如果这么算确实,不过我算的是纯编码时间上的效率;
如果团体开发,看管理的水平了,水平高的话,同时程序员水平也高而且项目简单,大概一天可以到60~70
不过如果应用复杂,一天能够有20行代码已经很不错了。
当然,我上面都是按编码时间算的;编码时间占总工程时间1/6左右,人月说的,呵呵
这么说起来,我现在一天代码也只有大概30来行左右...
而且你的那个系统项目要是算上整个周期,那么确实应该是中小型项目了
我用30000行实现一个"操作系统"...够吗?
也要写很久哦。。。。。。。
看看
比较无聊,用数据库不容易的多,哪有这么麻烦
用dephel做这种事不就是一天的事哦
本人数据库课程设计就是这种题
to mccxj(爱逛街的老鼠) :
你的代码看起来很舒服。
30000行实现一个操作系统,足矣!
最早的UNIX只有15000行,我比它翻了一倍呢!
30000行实现一个操作系统,足矣!
最早的UNIX只有15000行,我比它翻了一倍呢!
。。。是吗?没了解过。。。哎。。汗。。。
另:
to mccxj(爱逛街的老鼠) :
你的代码看起来很舒服。
哦。。是吗?谢谢。
呵呵,看看《莱昂氏UNIX源代码分析》吧,我要是没记错,就是15000行。
受教了!