C语言课程设计,求帮忙写完代码

自己写了一段,请高手帮忙啦
#include <stdio.h>
enum Major{Soft=1, Net, Jike}; //专业
enum Major major;
#define ARRAYSIZE 100 //数组大小
typedef struct
{
char szNo[11];
char szName[21];
enum Major major;
unsigned int nMath;
unsigned int nEgnlish;
unsigned int nCDevelop;
unsigned int nSum;
}Student ;
//函数声明
void MainMenu();
void AddStudent(Student*st, int*nCount);
void DisplayStudents(Student *st, int nCount);
int PositionInStudents(Student *st, int nCount, char *szNo);
void DeleteStudent(Student *st, int *nCount);
void ModifyStudent(Student *st, int nCount);
void MainMenu()
{
printf("\n 学生成绩管理系统\n\n");
printf("****************************\n");
printf("**** 1、添加新学生信息***\n");
printf("**** 2、删除学生信息***\n");
printf("**** 3、修改学生显示***\n");
printf("**** 4、显示学生信息***\n");
printf("**** 5、排名及统计***\n");
printf("**** 6、退出系统***\n");
printf("****************************\n");
}
//主函数
int main()
{
Student st[ARRAYSIZE] = {{""}}; //数组数据的数组
int nCount = 0; //表明数组st中实际存储了多少数据,初值为0
int nSelect;
while(1)
{
MainMenu();
printf("请输入您的选项:\n");
scanf("%d", &nSelect);
switch(nSelect)
{
case 1: //添加新记录
AddStudent(st, &nCount);
break;
case 2: //删除记录
//DeleteStudent(st, &nCount);
break;
case 3: //修改成绩
//ModifyStudent(st, nCount);
break;
case 4: //显示
DisplayStudents(st, nCount);
break;
case 5: //排名及统计
printf("修改成绩\n");
break;
case 6: //退出系统
printf("按任意键退出系统\n");
getchar();
return 0;
default:
printf("输入错误,请重新输入!\n");
break;
}
}
return 0;
}
//实现主菜单的第1个功能:添加学生
void AddStudent(Student*st, int*nCount)
{
printf("请输入十位数字学号\n");
scanf("%s",st->szNo);
printf("请输入学生姓名\n");
scanf("%s",st->szName);
printf("请输入学生专业 1计科 2网络 3软件\n");
scanf("%d",&st->major);
printf("请输入数学成绩\n");
scanf("%d",&st->nMath);
printf("请输入英语成绩\n");
scanf("%d",&st->nEgnlish);
printf("请输入程序设计成绩\n");
scanf("%d",&st->nCDevelop);
(*nCount)++;
}
void DisplayStudents(Student*st, int nCount)
{
int i;
i=0;
if(nCount==0)
printf("没有记录,请返回\n");
else
{
while (i<nCount);
{
printf("学号:%s\t",st->szNo);
printf("姓名:%s\t",st->szName);
printf("专业%d\t",&st->major);
printf("数学成绩%d\t",&st->nMath);
printf("英语成绩%d\t",&st->nEgnlish);
printf("程序设计成绩%d\t",&st->nCDevelop);
i++;
}
}
}
几个功能都要有啊,写完的再给100分。

第1个回答  2013-03-19
#include "operater.h" void Operater::welcome()
{
cout<<endl<<endl<<endl<<endl<<endl<<endl;
cout<<" 欢 迎 进 入 学 生 信 息 系 统 "<<endl<<endl<<endl<<endl;
cout<<" 制作人:***"<<endl<<endl<<endl<<endl;
cout<<" 请输入密码或输入A退出:\n\n\n ";
}
void Operater::display()
{
cout<<endl<<endl;
cout<<"**************************** 学生管理系统 **************************"<<endl;
cout<<"1: 添加一个学生信息"<<endl;
cout<<"2: 删除一个学生信息"<<endl;
cout<<"3: 显示所有学生的姓名"<<endl;
cout<<"4: 根据姓名显示单个学生所有信息"<<endl;
cout<<"5: 根据姓名对单个学生进行编辑"<<endl;
cout<<"6: 帮助菜单"<<endl;
cout<<"7: 保存数据"<<endl;
cout<<"0: 退出系统"<<endl;
cout<<"********************************************************************"<<endl;
}
void Operater::Loop()
{
List L1; //List 对象
char ch[20];
nodetype *p, *head;
int i; //存放节点序号

p=L1.load(); //初始化:从外部读入数据创建链表

head=p;
display();

while(1)
{
cout<<endl<<endl;
cout<<"请输入选择(帮助选项--> 6 ): "<<endl;
cin>>ch;

system("cls");
if(L1.check(ch, "1"))
{
p=L1.insnode(0);
head=p;

system("cls");
cout<<endl;
cout<<"************** 添加一个学生信息 ******************"<<endl;
cout<<"下面输入个人信息: "<<endl;
L1.editperson(p);
cout<<"下面输入学科成绩: "<<endl;
L1.editscore(p);
cout<<"下面输入联系方式: "<<endl;
L1.edittelephone(p);
}

if(L1.check(ch, "2"))
{
system("cls");
cout<<endl;
cout<<"************** 删除一个学生信息 ******************"<<endl;
L1.dispname();
cout<<"请输入学生姓名: "<<endl;
cin>>ch;
i=L1.find2(ch);
L1.delnode(i);
}

if(L1.check(ch, "3"))
{
system("cls");
cout<<endl;
cout<<"************** 显示所有学生姓名 ******************"<<endl;
L1.dispname();
}

if(L1.check(ch, "4"))
{
system("cls");
cout<<endl;
cout<<"************** 根据姓名显示单个学生所有信息 ******************"<<endl;
L1.dispname();
cout<<"请输入学生姓名: "<<endl;
cin>>ch;
p=L1.find(ch);
L1.dispnode(p);

}
if(L1.check(ch, "6"))
{
display();
}

if(L1.check(ch, "7")) //保存数据
{
FILE *fp;
if((fp=fopen("student.txt", "w"))==NULL)
{
cout<<"打开文件失败"<<endl;
return;
}

int i;
char t[255];

//将 L1.listlen() 赋予字符串中的数字
sprintf(t, "The Length Of Link: %d\n", L1.listlen());

fputs(t, fp);
strcpy(t, "\n");
fputs(t, fp);

p=L1.findnode(1); //将链表头指针赋予 p

for(i=0; i<L1.listlen(); i++)
{
fputs(p->address, fp); //输出地址
fputs(p->birthday, fp); //输出生日
fputs(p->pe.num, fp); //输出学号
fputs(p->sc.english, fp); //输出英语成绩
fputs(p->sc.vc, fp); //输出C++成绩

fputs(p->sc.math, fp); //输出数学成绩
fputs(p->sc.vb, fp); //输出vb成绩
fputs(p->pe.name, fp); //输出姓名
fputs(p->pe.sex, fp); //输出性别
fputs(p->pe.GJ, fp); //输出国籍
fputs(p->pe.MZ, fp); //输出民族
fputs(p->pe.XL, fp); //输出学历
fputs(p->te.SJ, fp); //输出手机
fputs(p->te.JD, fp); //输出家庭电话
fputs(p->te.XD, fp); //输出学校电话
fputs(t, fp);
p=p->next;
}
p=head;
fclose(fp);
}

if(L1.check(ch, "5"))
{
char c[20];
system("cls");
cout<<endl;
cout<<"************** 根据姓名对单个学生进行编辑 ******************"<<endl;
L1.dispname();
cout<<"请输入学生姓名: "<<endl;
cin>>c;
p=L1.find(c);

system("cls");
cout<<endl<<endl;
cout<<"*********************************************************"<<endl;
cout<<"1: 编辑个人信息"<<endl;
cout<<"2: 编辑学科成绩"<<endl;
cout<<"3: 编辑联系方式"<<endl;
cout<<"4: 显示个人信息"<<endl;
cout<<"5: 显示学科成绩"<<endl;
cout<<"6: 显示联系方式"<<endl;
cout<<"7: 显示该学生所有信息"<<endl;
cout<<"8: 帮助菜单"<<endl;
cout<<"9: 返回上一级菜单"<<endl;
cout<<"*********************************************************"<<endl;

while(1)
{
cout<<endl<<endl;
cout<<"请输入选择(帮助选项--> 6 ): "<<endl;
cin>>c;
system("cls");

if(L1.check(c, "1"))
{
system("cls");
cout<<endl;
cout<<"************** 编辑个人信息 ******************"<<endl;
L1.editperson(p);
}
else if(L1.check(c, "2"))
{
system("cls");
cout<<endl;
cout<<"************** 编辑学科成绩 ******************"<<endl;
L1.editscore(p);
}

else if(L1.check(c, "3"))
{
system("cls");
cout<<endl;
cout<<"************** 编辑联系方式 ******************"<<endl;
L1.edittelephone(p);
}

else if(L1.check(c, "4"))
{
system("cls");
cout<<endl;
cout<<"************** 显示个人信息 ******************"<<endl;
L1.dispperson(p);
}
else if(L1.check(c, "5"))
{
system("cls");
cout<<endl;
cout<<"************** 显示学科成绩 ******************"<<endl;
L1.dispscore(p);
}

else if(L1.check(c, "6"))
{
system("cls");
cout<<endl;
cout<<"************** 显示联系方式 ******************"<<endl;
L1.disptelephone(p);
}

else if(L1.check(c, "7"))
{
system("cls");
cout<<endl;
cout<<"7: 显示该学生所有信息"<<endl;
L1.dispnode(p);
}

else if(L1.check(c, "8"))
{
cout<<"8: 帮助菜单"<<endl;
cout<<endl;
system("cls");
L1.help();
}

else if(L1.check(c, "9"))
{
cout<<"9: 返回上一级菜单"<<endl;
cout<<endl;
display();
break; //用 break 跳出本循环,不要用 return ,return 是退出程序
}
}
}

else if(L1.check(ch, "0"))
return;
}
return;
}

"operater.h"
#include <iostream.h> // cin 及 cout
#include <string.h> // strcpy(): 字符串复制
#include <stdlib.h> // system("cls")
#include <stdio.h> // 文件操作
#include "list.h" // 我们要创建类 List 的对象和节点指针,所以要把类的头文件包含进来

class Operater
{
List L1;
public:
void welcome();//欢迎登录界面
void display();//显示菜单
void Loop(); //主循环

};
"List.cpp"
#include "list.h"
List::List()
{
head = NULL;
}

bool List::check(char *a, char *b) //对比两个字符串是否相等
{
int i;
int j=strlen(b);
for(i=0; i<j; i++)
{
if(*a==*b)
{
a++;
b++;
}
else
return 0;
}
return 1;
}
nodetype* List::creatlist (int n) //创建链表
{
nodetype *h=NULL, *s, *t;
int i=1;

for(int j=0; j<n; j++)
{
if(i==1) //创建第一个节点
{
h=(nodetype*)malloc(sizeof(nodetype));
h->next=NULL;
t=h;
}
else //创建其余节点
{
s=(nodetype*)malloc(sizeof(nodetype));
s->next=NULL;
t->next=s;
t=s; //t 始终指向生成的单链表的最后一个节点
}

i++;
}
head=h;
return h;
}
void List::readstr(FILE *f,char *string)
{
do
{
// 先读入一行文本
fgets(string, 255, f); //fgets(): 从文件 f 读入长度为 255-1 的字符串
// 并存入到 string 中
} while ((string[0] == '/') || (string[0] == '\n'));

return;
}
nodetype* List::load()
{
FILE *fp;
nodetype *p;
char c[255];
int num;
if((fp=fopen("student.txt", "r"))==NULL)
{
cout<<"打开文件失败"<<endl;
return 0;
}
readstr(fp, c);
sscanf(c, "The Length Of Link: %d", &num); //获取链表长度

p=creatlist(num); //创建链表

for(int i=0; i<num; i++)
{
readstr(fp, c);
strcpy(p->address, c);
readstr(fp, c);
strcpy(p->birthday, c);
readstr(fp, c);
strcpy(p->pe.num, c);
readstr(fp, c);
readstr(fp, c);
strcpy(p->sc.vc, c);
readstr(fp, c);
strcpy(p->sc.english, c);
readstr(fp, c);
strcpy(p->sc.math, c);
readstr(fp, c);
strcpy(p->sc.vb, c);
strcpy(p->pe.name, c);
readstr(fp, c);
strcpy(p->pe.sex, c);
readstr(fp, c);
strcpy(p->pe.GJ, c);
readstr(fp, c);
strcpy(p->pe.MZ, c);
readstr(fp, c);
strcpy(p->pe.XL, c);
readstr(fp, c);
strcpy(p->te.SJ, c);
readstr(fp, c);
strcpy(p->te.JD, c);
readstr(fp, c);
strcpy(p->te.XD, c);
p=p->next;
}
fclose(fp);
return p;
}
void List::dispnode(nodetype* p) //显示一个学生的所有信息
{
if(p!=NULL)
{
dispperson(p);
dispscore(p);
disptelephone(p);
}
}
void List::dispname() //显示所有学生姓名
{
nodetype* p=head;
cout<<"现有的学生: "<<endl;
if(p==NULL)
cout<<"没有任何学生数据"<<endl;
while(p!=NULL)
{
cout<<"姓名: "<<p->pe.name;

p=p->next;
}
}
int List::listlen() //返回链表长度
{
int i=0;
nodetype* p=head;
while(p!=NULL)
{
p=p->next;
i++;
}
return i;
}
nodetype* List::findnode (int i) //通过查找序号返回节点的指针
{
nodetype* p=head;
int j=1;
if( i>listlen()||i<=0 ) // i 上溢或下溢
return NULL;
else
{
while( p!=NULL && j<i ) //查找第 i 个节点并由 p 指向该节点
{
j++;
p=p->next;
}
return p;
}
}
nodetype* List::find(char c[]) //通过查找姓名返回节点的指针
{
nodetype* p=head;
int j=1;
strcat(c, "\n"); //从外部读入的字符串末尾都带了一个换行符
while( p!=NULL && !(check(c, p->pe.name))) //查找第 i 个节点并由 p 指向该节点
{
j++;
p=p->next;
}
return p;
}
int List::find2(char c[]) //通过查找姓名返回节点的序号
{
nodetype* p=head;
int j=1;
strcat(c, "\n"); //从外部读入的字符串末尾都带了一个换行符
while( p!=NULL && !(check(c, p->pe.name))) //查找第 i 个节点并由 p 指向该节点
{
j++;
p=p->next;
}
return j;
}
nodetype* List::insnode(int i)
{
nodetype *h=head, *p, *s;
s=(nodetype*)malloc(sizeof(nodetype)); //创建节点 s
s->next=NULL;
if(i==0) //i=0 时 s 作为该单链表的第一个节点
{
s->next = h;
h=s; //重新定义头节点
}
else
{
p=findnode(i); //查找第 i 个节点,并由 p 指向该节点
if(p!=NULL)
{
s->next=p->next;
p->next=s;
}
else cout<<"输入的 i 值不正确"<<endl;
}
head=h;

return s;
}
void List::delnode(int i) //删除第 i 个节点
{
nodetype *h=head, *p=head, *s;
int j=1;
if(i==1) //删除第一个节点
{
h=h->next;
free(p);
}
else
{
p=findnode(i-1); //查找第 i-1 个节点,并由 p 指向这个节点
if(p!=NULL && p->next!=NULL)
{
s=p->next; // s 指向要删除的节点
p->next=s->next;
free(s);
}
else
cout<<"输入的 i 值不正确"<<endl;
}
head=h;
}
void List::editperson(nodetype* p)
{
char c[100];
cout<<"请输入学号: "<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->pe.num, c);
cout<<"请输入姓名: "<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->pe.name, c);
cout<<"请输入性别:"<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->pe.sex, c);
cout<<"请输入生日(格式举例:2007-6-1): "<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->birthday, c);
cout<<"请输入民族:"<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->pe.MZ, c);
cout<<"请输入国籍:"<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->pe.GJ, c);
cout<<"请输入学历:"<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->pe.XL, c);

cout<<"请输入家庭住址(例如:河南洛阳市洛龙路71号"<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->address, c);

cout<<"编辑个人信息完成!"<<endl;

dispperson(p);
}
void List::editscore(nodetype* p)
{
char a[50];

cout<<"请输入vc成绩: "<<endl;
cin>>a;
strcat(a, "\n");
strcpy(p->sc.vc, a);

cout<<"请输入英语成绩: "<<endl;
cin>>a;
strcat(a, "\n");
strcpy(p->sc.english, a);

cout<<"请输入数学成绩: "<<endl;
cin>>a;
strcat(a, "\n");
strcpy(p->sc.math, a);

cout<<"请输入vb成绩: "<<endl;
cin>>a;
strcat(a, "\n");
strcpy(p->sc.vb, a);

cout<<"编辑学科成绩完成!"<<endl;

dispscore(p);
}
void List::edittelephone(nodetype* p)
{
char c[50];
cout<<"请输入手机号码: "<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->te.SJ, c);

cout<<"请输入家庭电话号码: "<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->te.JD, c);

cout<<"请输入学校电话号码: "<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->te.XD, c);

cout<<"编辑联系方式完成!"<<endl;

disptelephone(p);
}
void List::dispperson(nodetype* p)
{
cout<<"姓名: "<<p->pe.name;
cout<<"性别: "<<p->pe.sex;
cout<<"民族: "<<p->pe.MZ;
cout<<"国籍: "<<p->pe.GJ;
cout<<"学历: "<<p->pe.XL;
cout<<"出生日期: "<<p->birthday;
cout<<"家庭住址: "<<p->address;
}
void List::dispscore(nodetype* p)
{

cout<<"vc成绩: "<<p->sc.vc;
cout<<"英语成绩: "<<p->sc.english;
cout<<"数学成绩: "<<p->sc.math;
cout<<"vb成绩: "<<p->sc.vb;
}
void List::disptelephone(nodetype* p)
{
cout<<"手机号码是: "<<p->te.SJ;
cout<<"家庭电话是: "<<p->te.JD;
cout<<"学校电话是: "<<p->te.XD;
}
void List::help()
{
cout<<endl<<endl;
cout<<"*********************************************************"<<endl;
cout<<"1: 编辑个人信息"<<endl;
cout<<"2: 编辑学科成绩"<<endl;
cout<<"3: 编辑联系方式"<<endl;
cout<<"4: 显示个人信息"<<endl;
cout<<"5: 显示学科成绩"<<endl;
cout<<"6: 显示联系方式"<<endl;
cout<<"7: 显示该学生所有信息"<<endl;
cout<<"8: 帮助菜单"<<endl;
cout<<"9: 返回上一级菜单"<<endl;
cout<<"*********************************************************"<<endl;
}
List::~List()
{
nodetype *pa=head, *pb;
if(pa!=NULL)
{
pb=pa->next;
if(pb==NULL)
free(pa);
else
{
while(pb!=NULL)
{
free(pa);
pa=pb;
pb=pb->next;
}
free(pa);
}
}
}
"List.h"
// List.h: 类的所有成员都在头文件里声明
#include <iostream.h>
#include <malloc.h> // 用到申请内存函数 malloc() 和释放内存函数 free()
#include <string.h> // 字符串处理
#include <stdio.h> // 文件操作
#include <stdlib.h> // system("cls")

class address //家庭地址
{
public:
char city[10]; //城市
char town[10]; //县城
char village[10]; //乡镇
};

class telephone //联系方式
{
public:
char SJ[50]; //手机
char JD[30]; //家庭电话
char XD[30]; //学校电话
};
class person //个人信息
{
public:
char name[20]; //名字
char num[20]; //学号
char sex[10] ; //性别
char MZ[16]; //民族
char GJ[17]; //国籍
char XL[19]; //学历
};
struct score //成绩
{
char english[20];
char vc[20];
char math[20];
char vb[20];
};

//定义节点的类型
typedef class linknode
{
public:
char address[100]; //地址
char birthday[100]; //出生日期
class person pe;//个人信息
struct score sc;
class telephone te; //联系方式
bool flag;
class linknode* next;
}nodetype;

class List
{
nodetype* head;

public:
List();
List::~List();

linknode* creatlist(int); //创建链表
int listlen(); //返回链表长度
nodetype* findnode(int); //通过查找序号返回节点的指针
nodetype* find(char c[]); //通过查找姓名返回节点的指针
int find2(char c[]); //通过查找姓名返回节点的序号
nodetype* insnode(int); //插入节点
void delnode(int); //删除节点
nodetype* load(); //初始化:从外部读入数据
void readstr(FILE *f,char *string); //读行函数
bool check(char *a, char *b); //对比两个字符串是否相等
void help(); //显示帮助菜单

void editperson(nodetype*); //编辑个人说明
void editscore(nodetype*); //编辑学科成绩
void edittelephone(nodetype*); //编辑联系方式
void dispname(); //显示所有学生姓名
void dispnode(nodetype* p); //显示一个学生的所有信息
void dispperson(nodetype*); //显示一个学生的个人说明
void dispscore(nodetype*); //显示一个学生的学科成绩
void disptelephone(nodetype*); //显示一个学生的联系方式
第2个回答  2013-03-19
看的晕乎乎的
这个题直接用单向链表很简单的吧 都是链表操作
第3个回答  2013-03-19
有看懂你代码的功夫,还真不如重写了。
第4个回答  2013-03-19
留下你邮箱,或hi我。
相似回答