期末考试课程设计,使用C语言,以下是大致要求,还有就是,菜单我已经做出来了!

名称:学生管理系统
数据:见DX0224.txt
功能:
1.实现查询功能,(1).按姓名查询,(2).按学号查询,(3).显示全部信息
2.实现排序功能,(1).按姓名,(2).按学号,(3).按C语言
3.实现添加功能
4.实现删除功能
5.实现修改功能
6.计算每个学生的加权平均分(英语5,数学4,c语言4.5,物理3),保留两位小数并保存到原始数据文件
score1.txt:在90-100;
score2.txt: 在80-89;
score3.txt:在70-79;
score4.txt:在60-69;
score5.txt:<60;
其中内容为:
学号 姓名 英语 数学 c语言 物理 总成绩 加权
00000 xxxx xx xx xx xx xxx xxx
00000 xxxx xx xx xx xx xxx xxx
………………
菜单部分:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct stud
{
char num[20];
char name[20];
char sex[20];
char age[20];
int En;
int Ma;
int Cy;
int Ph;
int score;
}stud[10],*pp;
void mingcha() /*按姓名查询*/
{
int i;
char c[10];
pp=stud;
printf("请输入需要查询的姓名:");
scanf("%s",&c);
for(i=0;i<10;i++)
{
if(strcmp(stud[i].name,c)==0)
printf("%-s%7s%5s%11s%6d%6d%6d%6d%33d\n",pp->num,pp->name,pp->sex,pp->age,pp->En,pp->Ma,pp->Cy,pp->Ph,pp->score);
if(strcmp(stud[i].name,c)!=0||i==10)
printf("没有此人\n");
}
}

void show() /*显示全部信息*/
{
int n;
char str1[80];
FILE *fp;
if((fp=fopen("DX0224.txt","r"))==NULL)
{
printf("Cannot open file\n");
}
fgets(str1,80,fp);
printf("%s",str1);
pp=stud;
for(n=0;n<10;n++,pp++)
{
fscanf(fp,"%s%s%s%s%d%d%d%d",pp->num,pp->name,pp->sex,pp->age,&pp->En,&pp->Ma,&pp->Cy,&pp->Ph);
printf("%-s%7s%5s%11s%5d%5d%5d%6d%36d\n",pp->num,pp->name,pp->sex,pp->age,pp->En,pp->Ma,pp->Cy,pp->Ph,pp->score);
}
fclose(fp);
}
void main()
{
int r;
printf(" 学生成绩查询 \n");
printf(" *******************************\n");
printf(" | 1 按姓名查询 |\n");
printf(" | 2 按学号查询 |\n");
printf(" | 3 按姓名排序 |\n");
printf(" | 4 按总成绩排序 |\n");
printf(" | 5 c语言成绩排序 |\n");
printf(" | 6 按姓名删除 |\n");
printf(" | 7 按学号删除 |\n");
printf(" | 8 录入学生信息 |\n");
printf(" | 9 修改学生信息 |\n");
printf(" | 10 显示全部信息 |\n");
printf(" | 11 退出 |\n");
printf(" *******************************\n");
printf(" 请输入操作步骤:");
scanf("%d",&r);
switch(r)
{
case 1:mingcha();break;
case 2:haocha();break;
case 3:mingpai();break;
case 4:chengpai();break;
case 5:ccha();break;
case 6:mingshan();break;
case 7:haoshan();break;
case 8:luru();break;
case 9:xiugai();break;
case 10:show();break;
default:tui();
}
}
各位大虾,急求啊!!哪位会做的,麻烦马上发给我啊,发到我邮箱里就行,[email protected]

C++版的,注意可别去//,最近考试,没时间改为C版的,以前帮同学写的,有问题再找我,我们要熄灯了!
#include<iostream>
#include<fstream>
#include<string> //控制字符串的头文件
using namespace std;
class student//建立同学录的一个类
{
//头接点
public:
char name[20];
int num;
int age;
char sex;
double en;
double ma;
double com;
double ave;
student *next;
student *stu;
student(); //构造函数
void display()
{
cout<<"名字: "<<name<<" "<<"学号: "<<num<<" "<<"性别: "<<sex<<"年龄: "<<age<<"英语: "<<en<<" "<<"数学: "<<ma<<" "<<"计算机: "<<com<<endl;
}
student (char n[20],int nu, int ag, char se,double e,double m,double c,double av);
~ student ();
void Set();//添加
void Delete();//删除
void Alter();//修改
void List();//显示
void aver();
void ssearch();//查询
// void RearchN();
// void RearchNU();
void staxis(); //排序
void ssave(); //保存
void sload(); //读取
//排序函数
void pnumb();
void peng();
void pmat();
void pcomp();
friend void caozuo(int);
//void pAA();

};
void student::aver()
{
double z;
z=en+ma+com;
ave=z/3;
}
student::student()//构造函数
{
strcpy(name, "nomame");
num=0;
sex='M';
age=0;
double en=0;
double ma=0;
double com=0;
double ave=0;

}
student::student (char n[20],int nu, int ag, char se,double e,double m,double c,double av)
{
strcpy(name, n);
num=nu;
sex=se;
age=ag;
en=e;
ma=m;
com=c;
ave=av;
}

student::~student(){};
student *s[50];
int i=0;
int j=0;
//char name[20];
//int num;
//int age;
//char sex;
//double en;
//double ma;
//double com;
void student::Set()
{
cout<<"请输入姓名:"<<endl;
cin>>name;
cout<<"请输入学号:"<<endl;
cin>>num;
cout<<"请输入年龄:"<<endl;
cin>>age;
cout<<"请输入性别:"<<endl;
cin>>sex;
cout<<"请输入英语成绩:"<<endl;
cin>>en;
cout<<"请输入数学成绩:"<<endl;
cin>>ma;
cout<<"请输入计算机成绩:"<<endl;
cin>>com;
j++;
s[i]=new student(name,num, age, sex,en,ma,com,ave);
i++;
}
void student:: Delete() //(2)删除人员(Delete)
{
cout<<"请输入您要删除的学生姓名:"<<endl;
cin>>name;
for(int h=0;h<i;h++)
{
if(strcmp(name,s[h]->name)==0)
{
i--;
s[h]=s[h+1];
h++;
}
else cout<<"您要求删除的对象本来就不存在!请检查输入的正确性!";
}
}
void student::Alter() //(3)修改数据(Alter)
{
cout<<"请输入您要修改的学生的姓名:"<<endl;
cin>>name;
for(int h=0;h<i;h++)
{
if(strcmp(name,s[h]->name)==0)
{
int nu;
int ag;
char se;
double e;
double m;
double c;
cout<<"请输入学号: "<<endl;
cin>>nu;
cout<<"请输入年龄:"<<endl;
cin>>ag;
cout<<"请输入性别:"<<endl;
cin>>se;
cout<<"请输入英语成绩:"<<endl;
cin>>e;
cout<<"请输入数学成绩:"<<endl;
cin>> m;
cout<<"请输入计算机成绩:"<<endl;
cin>>c;
s[h]->num=nu;
s[h]->age=ag;
s[h]->sex=se;
s[h]->en=e;
s[h]->ma=m;
s[h]->com=c;
cout<<"数据修改成功!";
break;
}
if (i == j)
{
cout<<"对不起!您要查询的学生不存在!"<<endl;
break;
}
//else cout<<"您要修改的学生本来就不存在!请检查重新输入!"<<endl;
}
}
void student::List() //(4)显示记录(List)
{
cout<<"本系统所有通讯录的数据如下:"<<endl;
if(i==0)
cout<<"管理系统中没有录入数据或者数据已经被删除!"<<endl;
for(int k=0;k<i;k++)
{
// cout<<"姓名:"<<stu[k].name<<" "<<"学号:"<<stu[k].num<<" "<<"年龄:"<<stu[k].age<<" "<<"性别:"<<stu[k].sex<<" "<<"英语:"<<stu[k].ma<<" "<<"计算机:"<<stu[k].com<<" "<<"平均:"<<stu[k].ave<<endl;
//cout<<"姓名: "<<s[k]->name<<" "<<"学号:"<<s[k]->num<<" "<<"年龄:"<<s[k]->age"性别:"<<s[k]->sex<<" "<<"英语:"<<s[k]->en<<" "<<"数学:"<<stu[k].ma<<" "<<"计算机:"<<stu[k]->com<<" "<<"平均分: "<<stu[k]->ave<<endl;
s[k]->display();
}
}

//void student::RearchN()
//{
//if(i==0)
//cout<<"管理系统中没有录入数据或者数据已经被删除!"<<endl;
//cout<<"请输入你要查询的学生姓名"<<endl;
//cin>>name;
//for(int j=0;j<i;j++)
//{
//if(strcmp(name,s[j]->name)==0)
//{
//cout<<"您要查询的学生是:"<<s[j]->name<<endl;
//cout<<"学号:"<<s[j]->num<<" "<<"年龄: "<<s[j]->age<<" "<<"性别: "<<s[j]->sex<<" "<<"英语成绩:"<<s[j]->en<<" "<<"数学成绩:"<<s[j]->ma<<" "<<"计算机成绩:"<<s[j]->com<<endl;
//break;
//}

// else
// cout<<"对不起!您要查询的学生不存在!"<<endl;
//if (i == j)
//{
//cout<<"对不起!您要查询的学生不存在!"<<endl;
//}
//}
//}
//void student::RearchNU()
//{
// int n;
// if(i==0)
// cout<<"管理系统中没有输入数据!"<<endl;
// cout<<"请输入你要查询的学生的学号"<<endl;
// cin>>n;
// for(int j=0;j<i;j++)
// {
// if(s[j]->num==n)
// {
// cout<<"您要查询的学生是:"<<s[j]->name<<endl;
// cout<<"年龄: "<<s[j]->age<<" "<<" 性别: "<<s[j]->sex<<" "<<"英语成绩:"<<s[j]->en
// <<" "<<"数学成绩:"<<s[j]->ma<<" "<<"计算机成绩:"<<s[j]->com<<endl;
// break;
// }

//else cout<<"对不起!您要查询的学生不存在!"<<endl;
//}
//if (i == j)
//{
// cout<<"对不起!您要查询的学生不存在!"<<endl;
// }
//}
void student::ssearch()//查询
{
//system("cls");
cout<<"\n** 查询学生信息 **\n"<<endl;
cout<<"请输入查询方式:"<<endl;
cout<<"1.按学号查询"<<endl;
cout<<"2.按姓名查询"<<endl;
cout<<"3.返回"<<endl;
char c;
cin>>c;
switch (c)
{
case '1':
{ int n;
if(i==0)
{
cout<<"管理系统中没有输入数据!"<<endl; exit(0);
}
cout<<"请输入你要查询的学生的学号"<<endl;
cin>>n;
for(int j=0;j<i;j++)
{
if(s[j]->num==n)
{
cout<<"您要查询的学生是:"<<s[j]->name<<endl;
cout<<"年龄: "<<s[j]->age<<" "<<"性别: "<<s[j]->sex<<" "<<"英语:"<<s[j]->en<<" "<<"数学:"<<s[j]->ma<<" "<<"计算机:"<<s[j]->com<<"平均分:"<<endl;
break;
}

//else cout<<"对不起!您要查询的学生不存在!"<<endl;
}
if (i == j)
{
cout<<"对不起!您要查询的学生不存在!"<<endl;
}
break;
}
case '2':

{ if(i==0)

cout<<"请输入你要查询的学生姓名"<<endl;
cin>>name;
for(int j=0;j<i;j++)
{
if(strcmp(name,s[j]->name)==0)
{
cout<<"您要查询的学生是:"<<stu[j].name<<endl;
//cout<<"学号:"<<stu[j].num
cout<<"学号:"<<stu[j].num<<" "<<"年龄: "<<stu[j].age<<" "<<"性别: "<<stu[j].sex<<" "<<"英语:"<<stu[j].en<<" "<<"数学:"<<stu[j].ma<<" "<<"计算机:"<<stu[j].com<<"平均分:"<<endl;
break;
};

// else
// cout<<"对不起!您要查询的学生不存在!"<<endl;
if (i == j)
{
cout<<"对不起!您要查询的学生不存在!"<<endl;
}
}
break;}
case '3':
return ;
}

}

void student::pnumb()//按学号排序
{
student *p1,*p2;
int n;
p1=stu;
n=1;
while(p1->next)

cout<<"共有"<<n<<"条信息..."<<endl;
int i;
p1=stu;
for(i=1;i<n;i++)
{
p1=stu;
if (p1->num>p1->next->num) // 如果头结点大于第二个的
{
p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //头结点交换
stu=p2;
}
p1=stu;
while(p1->next->num) //中间的交换
{
p2=p1;
p1=p1->next;
if(p1->num>p1->next->num)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交换
}
}
}

p1=stu;
do
{
p1->display();
p1=p1->next;
}while(p1);
}

void student::pmat() //按数学成绩排序
{
student *p1,*p2;
int n;
p1=stu;
n=1;
while(p1->next)

cout<<"共有"<<n<<"条信息..."<<endl;
int i;
p1=stu;
for(i=1;i<n;i++)
{
p1=stu;
if (p1->ma>p1->next->ma) // 如果头结点大于第二个的
{ p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //头结点交换
stu=p2;
}
p1=stu;
while(p1->next->next) //中间的交换
{ p2=p1;
p1=p1->next;
if(p1->ma>p1->next->ma)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交换
}
}
}
p1=stu;
do
{ p1->display();
p1=p1->next;
}while(p1);
}

void student::pcomp()//按语文成绩排序
{
student *p1,*p2;
int n;
p1=stu;
n=1;
while(p1->next)

cout<<"共有"<<n<<"条信息..."<<endl;
int i;
p1=stu;
for(i=1;i<n;i++)
{
p1=stu;
if (p1->com>p1->next->com) // 如果头结点大于第二个的
{
p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //头结点交换
stu=p2;
}
p1=stu;
while(p1->next->next) //中间的交换
{
p2=p1;
p1=p1->next;
if(p1->com>p1->next->com)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交换
}
}
}
p1=stu;
do
{
p1->display();
p1=p1->next;
}while(p1);
}

void student::peng()//按英语成绩排序
{
student *p1,*p2;
int n;
p1=stu;
n=1;
while(p1->next)

cout<<"共有"<<n<<"条信息..."<<endl;
int i;
p1=stu;
for(i=1;i<n;i++)
{ p1=stu;
if (p1->en>p1->next->en) // 如果头结点大于第二个的
{ p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //头结点交换
stu=p2;
}
p1=stu;
while(p1->next->next) //中间的交换
{ p2=p1;
p1=p1->next;
if(p1->en>p1->next->en)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交换
}
}
}
p1=stu;
do
{ p1->display();
p1=p1->next;
}while(p1);
}

void student::staxis()//排序
{

char c;
cout<<"请选择以何种方式排序:"<<endl;
cout<<"1……以学号排序"<<endl;
cout<<"2……以英语成绩排序"<<endl;
cout<<"3……以数学成绩排序"<<endl;
cout<<"4……以计算机成绩排序"<<endl;

cout<<"5……返回"<<endl;
cout<<"请选择(1-5)"<<endl;
cin>>c;

switch (c)
{
case '1':pnumb(); break;
case '2':peng(); break;
case '3':pmat(); break;
case '4':pcomp(); break;

case '5':return;
}

}

void student::ssave() //保存到文件
{

char c;
cout<<"\n保存学生信息(将覆盖原文件),是否继续?[Y/N]:"; cin>>c;
if(toupper(c)!='Y') return;

ofstream tfile("date.txt",ios::binary);
student *p=stu;
while(p)// 写入文件
{
tfile<<p->name<<"\t"<<p->num<<"\t"<<p->en<<"\t"<<p->ma<<"\t"<<p->com<<"\t"<<p->ave;
tfile<<endl;
p=p->next;
}
tfile.close();
cout<<"保存完毕..."<<endl;
}

void student::sload() //读取
{
student *p;
p=stu;
while(p)
{
stu=p->next;
delete p;
p=stu;
}

ifstream tfile("date.txt",ios::binary);

char name1[20];
int num1;
char sex;
double en1,ma1,com1,ave1,age1;

tfile>>name1>>num1>>en1>>ma1>>com1>>ave1>>sex>>age1;
while(tfile.good())
{
//创建学生接点
student *s;
s=stu;
s=new student(name1,num1,age1,sex,en1,ma1,com1,ave1);
s->next=0;
s->ave=stu->ave;
if(stu) //若已经存在结点
{
student *p2;
p2=stu;
while(p2->next) //查找尾结点
{
p2=p2->next;
}
p2->next=s; //连接
}
else //若不存在结点(表空)
{
stu=s; //连接
}
tfile>>name1>>num1>>en1>>ma1>>com1>>ave1;
}
tfile.close();
cout<<"\n学生信息已经装入...\n";

}

void caozuo(int p)
{

student t;
switch(p)
{
case 0:t.Set();break;
case 1:t.Set();break;
case 2:t.Delete();break;
case 3:t.Alter();break;
case 4:t.List();break;
case 5:t.ssearch();//查询
case 6:t.staxis(); //排序
case 7:exit(0);break;
}
}
void main()
{
char w;
do
{
cout<<"请输入操作代码( 成绩录入/0 增加人员/1 删除人员/2 修改数据/3 显示记录/4 查询/5 排序/6 退出/7)"<<endl;
int a;
cin>>a;
caozuo(a);
cout<<"您想继续进行其他操作吗?(y/n)"<<endl;
cin>>w;
}while(w=='y');

} //利用while语句又回到了前面的循环
另外,团IDC网上有许多产品团购,便宜有口碑
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-01
我只是给思路哈 具体的自己做 虽然这个课程设计不是很大 但是最近我还是忙着准备考试 所以 自己整理下咯

1 前面的循环从30——40 后面的循环0到100 满足的要求是整除10 余数为3 即
for(i=3;i<94;i++) if(i%10==3) for(j=30;j<40;j++) if(i*3564==j*6237) printf("这两个数字是%d %d",i.j);
2
2次函数的根 你会不知道 先判定是否存在实根 是的话 输出来既可以了 别告诉我你不知道怎么做哈 虚根的话 一般不要求 呵呵
3
定义一个数组 a;用来装后面的4个个数字
//初始化所有的可能
int a[100][4]=;
int i=0;int j=0;int k=0;
for(j=0;j<10;j++)
for(k=0;k<10;k++)
{a[i][0]=a[i][1]=j;a[i][2]=a[i][3]=k;i++;
}

因为4位数的平方根不会大于100 所以解法如下:
for(i=0;i<=100;i++)
for(j=0;j<=100;j++)

4
跟猴子吃桃一样的 算法是 s=(s+1)*2 循环九次 因为第一次算的就是倒数第二天的 所以。。。。。。。
5
#include <iostream>
void main ()
{int i,j,k;
for(i=1;i<10;i++)
{for(j=1;j<10;j++)
if(j<=i)
printf("%d*%d=%d ",i,j,i*j);
printf("\n");
}
}
6
退出程序很很简单的 不过 退出程序 说实话 我是真的不会写 不过强制退出程序可以告诉你一个 就是 exit(1);(以后在程序出错 比如打不开某个文件的时候 就用这个 也是我们常用的退出语句之一)具体咋写的 还真是对不起 我不知道
7
你自己把每个部分写成一个函数
在主函数调用就可以了用switch语句 另外 加油哈 祝你早点做完 呵呵 对了 有些地方 还可以优化的(比如第三题的循环 不用从0开始的等等 ) 你自己看着优化下啊 一时间做的 不是很完美
第2个回答  2011-07-01
呵呵,最多10人,多了少了都不行?这个真不行。追问

哦,对不起啊,这个10人 要改的,这只是测试的一下,实际上要用到链表或者其实的结构吧

追答

#include
#include
#include
using namespace std;
struct student
{
char num[20];
char name[20];
int En;
int Ma;
int Cy;
int Ph;
int score;
float weight;

student* next;

void Show()
{
printf("%7s %5s %d %d %d %d %d %2f\n",
num,name,En,Ma,Cy,Ph,score,weight);
}
};

student* head = NULL;

//是否有重复记录 true = 有 false = 没有
bool IsRepeat(student* node)
{
if(head == NULL || node == NULL)
return false;
student * p = head;
while( p != NULL)
{
if(strcmp(p->num,node->num)==0)
{
return true;
}
p = p->next ;
}
return false;
}
//清除全部记录
void Release()
{
if(head == NULL)
return;
else
{
student* p = head;
while(p != NULL)
{
head = p->next;
delete p;
p = head;
}
head = NULL;
}
printf("清除全部记录!\n");
}
void Create()
{
if(head != NULL)
{
char key;
printf("是否清除原有信息(Y/N)?:");
scanf("%c",&key);
if(key == 'Y' || key == 'y')
Release();
else
return;
}
head = NULL;
}
//添加
void Add(student* node)
{
if(head == NULL)
{
head = node;
}
else
{
student* p = head;
while( p->next != NULL)
{
p = p->next;
}
p->next = node;
}
}
//删除
void Delete(student* node)
{
if(head == NULL)
{
printf("没有记录!\n");
return;
}
else
{
student * p = head;
student * temp = NULL;
while(strcmp(p->name,node->name) != 0 && p->next != NULL)
{
temp = p;
p = p->next;
}
if(strcmp(p->name,node->name)==0)
{
if(p == head)
{
head = head->next;
}
else
{
temp->next = p->next;
}
delete p;
printf("删除成功!\n");
}
}
}
void Query(student* node)
{
int flag = 0;
student * p = head;
while( p != NULL)
{
if(strcmp(p->name,node->name)==0)
{
p->Show();
flag = 1;
}
p = p->next ;
}
if(!flag)
printf("没有此记录!\n");
}

第3个回答  2011-07-01
纠结。
相似回答