求改错(大一作业)

Billcat 2012-07-12 11:50:51
很简单的大一学生的作业,有问题问我,我不懂C,求助万能的WEB,哪位热心朋友帮忙修改修改:

(题目 学生成绩管理 实现功能:输入、输出、插入、删除、查找、追加、读入、显示、保存、拷贝、排序、索引、分类合计、退出。)

...全文
380 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lfh15 2012-07-29
  • 打赏
  • 举报
回复
STUDENT *p;
char s[15]; /*存放姓名的字符数组*/
p=p->next; /*移动指针,指向下一结点*/
if(p==NULL) /*如果指针为空*/
printf("\n没有叫%s的学生\n",s); /*显示没有该学生*/


A2415526569 2012-07-28
  • 打赏
  • 举报
回复
楼主问问题的方法有待改善呀!
Billcat 2012-07-12
  • 打赏
  • 举报
回复
跟上,2:

STUDENT *init()
{
return NULL;
}

void inputs(char *prompt, char *s, int count)/*输入字符串,并进行长度验证*/
{
char p[255];
do
{
//printf(prompt); /*允鞠提示信息*/
scanf("%s",p); /*输入字符串*/
if(strlen(p)>count)printf("\n too long! \n"); /*进行长度校验,超过count值重输入*/
}
while(strlen(p)>count);
strcpy(s,p); /*将输入的字符串拷贝到字符串s中*/
}

void creat(int n,STUDENT *h)
{
h=(STUDENT*)malloc(sizeof(STUDENT));
STUDENT *p,*q;
char m=' ';
h->next=NULL;
q=h;
while(m==' ')
{
p=(STUDENT*)malloc(sizeof(STUDENT));
scanf("%s%s%d%d%d%c",p->name,p->num,&p->score[0],&p->score[1],&p->score[2],&m);
p->average=(p->score[0]+p->score[1]+p->score[2])/3;
q->next=p;
q=p;
}
q->next=NULL;
}

void print(char fileName[])/*输出链表中结点信息*/
{
FILE *pFile;
int i=0; /* 统计记录条数*/
STUDENT *p; /*移动指针*/
system("cls"); /*清屏*/
//p=h; /*初值为头指针*/
printf("\n\n\n****************************STUDENT********************************\n");
printf("%-10s%-10s%-10s%-10s%-10s%\n","姓名","学号","数学","英语","物理");
printf("|---|----------|---------------|----|----|----|--------|-------|-----|\n");
if((pFile=fopen(fileName,"rb"))==NULL)
{
printf("打开文件%s失败!""\n敲击任意键退出!\n",fileName);
system("PAUSE");
exit(1);
}
//printf("\n\n%8s显示学生信息\n","");
//printf("\n","编号","学号","数学","英语","物理");
for(i=0;i<N;i++)
{
fscanf(pFile,"%-10s%-10d%-10d%-10d%-10d%",p->name,p->num,&p->score[0],&p->score[1],&p->score[2]);
if(ferror(pFile)!=0)
{
clearerr(pFile);
printf("文件写操作出错!""\n敲击任意键退出!\n");
system("PAUSE");
exit(1);
}
printf("%-10s%-10s%-10d%-10d%-10d%",p->name,p->num,&p->score[0],&p->score[1],&p->score[2]);
}
fclose(pFile);
printf("**********************************end*********************************\n");
}

void Delete(STUDENT *h)/*删除记录*/
{
STUDENT *p,*q; /*p为查找到要删除的结点指针,q为其前驱指针*/
char s[11]; /*存放学号*/
printf("请输入要删除学生的学号\n"); /*显示提示信息*/
scanf("%s",s); /*输入要删除记录的学号*/
q=p=h; /*给q和p赋初值头指针*/
while(strcmp(p->num,s)&&p!=NULL) /*当记录的学号不是要找的,或指针不为空时*/
{
q=p; /*将p指针值赋给q作为p的前驱指针*/
p=p->next; /*将p指针指向下一条记录*/
}
if(p==NULL) /*如果p为空,说明链表中没有该结点*/
printf("\nlist no %s student\n",s);
else /*p不为空,显示找到的记录信息*/
{
printf("*****************************have found***************************\n");
printf("%-10s%-10s%-10s%-10s%-10s%\n","姓名","学号","数学","英语","物理");
printf("|----------|---------------|----|----|----|--------|-------|-----|\n");
printf("%-10s%-10d%-10.1d%-10.1d%-10.1d\n",p->name,p->num,p->score[0],p->score[1],p->score[2]);
printf("********************************end*******************************\n");
getch(); /*压任一键后,开始删除*/
if(p==h) /*如果p==h,说明被删结点是头结点*/
h=p->next; /*修改头指针指向下一条记录*/
else
q->next=p->next; /*不是头指针,将p的后继结点作为q的后继结点*/
free(p); /*释放p所指结点空间*/
printf("\n 已经删除学号为%s的学生\n",s);
printf("不要忘记保存文件\n");/*提示删除后不要忘记保存文件*/
}
//return(h); /*返回头指针*/
}

void search(STUDENT*h)/*查找记录*/ /*当记录的姓名不是要找的,或指针不为空时*/
{
STUDENT *p;
char s[15]; /*存放姓名的字符数组*/
p=p->next; /*移动指针,指向下一结点*/
if(p==NULL) /*如果指针为空*/
printf("\n没有叫%s的学生\n",s); /*显示没有该学生*/
else /*显示找到的记录信息*/
{
//printf (*h)
{
STUDENT *p; /* 移动指针*/
system("cls"); /*清屏幕*/
printf("请输入要查找学生的姓名\n");
scanf("%s",s); /*输入姓名*/
p=h; /*将头指针赋给p*/
while(strcmp(p->name,s)&&p!=NULL) printf("\n\n*****************************havefound***************************\n");
printf("%-10s%-10s%-10s%-10s%-10s%\n","姓名","学号","数学","英语","物理");
printf("|----------|---------------|----|----|----|--------|-------|-----|\n");
printf("%-10s%-10d%-10d%-10d%-10d\n",
p->name,p->num,p->score[0],p->score[1],p->score[2]);
printf("********************************end*******************************\n");
}
}
}
Billcat 2012-07-12
  • 打赏
  • 举报
回复
分段贴吧:

1.

#include <stdio.h> /*I/O函数*/
#include <stdlib.h> /*其它说明*/
#include <string.h>/*字符串函数*/
#include <conio.h> /*屏幕操作函数*/
#include <mem.h> /*内存操作函数*/
#include<iostream>
#include <ctype.h> /*字符操作函数*/

#define N 3 /*定义常数*/

typedef struct z1 /*定义数据结构*/
{
char name[15];
char num[15];
int score[3];
float sum;
float average;
int order;
struct z1 *next;
} STUDENT;
/*以下是函数原型*/
STUDENT *init(); /*初始化函数*/
void creat(int n,STUDENT *h); /*创建链表*/
void Delete(STUDENT *h); /*删除记录*/
void print(STUDENT *h); /* 显示所有记录*/
void search(STUDENT *h); /*查找*/
void save(char fileName[]); /*保存*/
void open();/*打开文件*/
STUDENT *load(); /*读入记录*/
void computer(STUDENT *h); /*计算总分和均分*/
void insert(STUDENT *h); /*插入记录*/
void append(); /*追加记录*/
void copy(); /*复制文件*/
STUDENT *sort(STUDENT *h); /*排序*/
STUDENT *index(STUDENT *h); /*索引*/
void total(STUDENT *h); /*分类合计*/

/******主函数开始*******/
int main()
{
int n;
char path[30];
STUDENT *head,*p,*z,*q1; //用于保存头结点的地址
printf("请输入文件的存储路径:\n");
scanf("%s",path);
printf("请输入学生的个数:\n");
scanf("%d",&n);//输入学生的个数
save(path,n);//将键盘输入的学生信息存入在文本文件
z=open();//从文件中得到相关的学生信息,并返回存放信息的数组的首地址
p=creat(n,z);
q1=copy(p);
head=init(); /*初始化链表*/
{
do
{
printf(" ***********************************************************\n");
printf(" ~~~~~~~~~~~~~~~~~~欢迎光临学生成绩管理系统~~~~~~~~~~~~~~~~~\n");
printf(" ***************************^_^*****************************\n");
printf(" * 0.退出该操作系统 1.删除记录 *\n");
printf(" * 2.显示全部记录 3.查找记录 *\n");
printf(" * 4.保存文件 5.读取文件内容 *\n");
printf(" * 6.计算总分和均分 7.插入记录 *\n");
printf(" * 8.复制文件 9.以学生总分进行降序排序 *\n");
printf(" * 10.追加记录 11.以学生姓名进行索引 *\n");
printf(" * 12.分类合计 *\n");
printf(" ***********************************************************\n");
printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf(" ***********************************************************\n");
printf(" **请输入您需要进行的操作**:");
scanf("%d",&n);
system("cls");
switch(n)
{
case 0:
printf(" ************************************************************\n");
printf(" ~~~~~~~~~~~~~~退出学生成绩管理系统,感谢使用!~~~~~~~~~~~~~~\n");
printf(" ************************************************************\n");
exit(0);

case 1:
printf("您选择的操作是:删除记录");
Delete(head);
system("cls");
break;
case 2:
printf("您选择的操作是:显示全部记录");
print(head);
break;
case 3:
printf("您选择的操作是:查找记录");
search(head);
break;
case 4:
printf("您选择的操作是:保存文件");
save();
system("pause");
system("cls");
break;
case 5:
printf("您选择的操作是:读取文件内容");
head=load();
break;
case 6:
printf("您选择的操作是:计算总分和均分");
computer(head);
break;
case 7:
printf("您选择的操作是:插入记录");
insert(head);
system("cls");
break;
case 8:
printf("您选择的操作是:复制文件");
copy();
break;
case 9:
printf("您选择的操作是:以学生总分进行降序排序");
head=sort(head);
break;
case 10:
printf("您选择的操作是:追加记录");
append();
break;
case 11:
printf("您选择的操作是:以学生姓名进行索引");
head=index(head);
break;
case 12:
printf("您选择的操作是:分类合计");
total(head);
break;
}
}
while(1);
}
return 0;
}
Billcat 2012-07-12
  • 打赏
  • 举报
回复
对不起,代码长度超限制了,正像其他办法...
矫情狗_____ 2012-07-12
  • 打赏
  • 举报
回复
这个不叫改错了,连代码都没有,这等于帮你做作业
yrnaaa 2012-07-12
  • 打赏
  • 举报
回复
问具体的问题会很快得到答案的,楼主编译一下,运行一下,有什么错误贴出来,NX的人很快会给出建议,比这样贴出代码要快些。
luoyingbinfeng 2012-07-12
  • 打赏
  • 举报
回复
STUDENT *p;
char s[15]; /*存放姓名的字符数组*/
p=p->next; /*移动指针,指向下一结点*/
if(p==NULL) /*如果指针为空*/
printf("\n没有叫%s的学生\n",s); /*显示没有该学生*/

*p没有被赋值,而且 p=p->next; 应该在一个循环中吧!而且char s[15]; 好像没有被赋值吧
luoyingbinfeng 2012-07-12
  • 打赏
  • 举报
回复
strcpy(s,p); /*将输入的字符串拷贝到字符串s中*/
当你拷贝字符串的时候请用strncpy,并增加一个参数就是要拷贝的字符串的长度!
shen_wei 2012-07-12
  • 打赏
  • 举报
回复
根据你贴上的代码。根本就不全。。。没有的函数要我们补全吗??

void copy(); /*复制文件*/

void save(char fileName[]); /*保存*/
shen_wei 2012-07-12
  • 打赏
  • 举报
回复
错误是啥、、、没有人愿意看这么长的代码!!

直接上错误。。或者你自己单步调试!!

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧