| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1524 人关注过本帖
标题:[求助]有关学生成绩管理的一道题目
只看楼主 加入收藏
kenny238
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-9-16
收藏
 问题点数:0 回复次数:18 
[求助]有关学生成绩管理的一道题目

题目如下,我实在对这道题目束手无策,只要请广大高手帮忙了!!!!
利用链表结构实现学生成绩管理,了解数据库管理的基本功能,掌握C语言中的结构体、指针、函数、文件操作等知识。主要完成以下功能:输入、显示、删除、查找、插入、保存、读入、排序、计算等。

#define N 3

tpyedef struct s1

{char no[11]; /*学号*/

char name[15]; /*姓名*/

int score[N]; /*各门课成绩*/

float sum; /*总分*/

float average; /*平均分*/

int order; /*名次*/

struct s1 next; /*指向后续结点的指针*/

}Student; /*定义结构体类型*/

Student *head;

题目要去要有一些界面的选择操作,如:

menu_select()主菜单函数实现界面设计,具体模型如下:

**************************************************

0. Enter record

1. List the file

2. Search record on name

3. Delete a record

4. Add record

5. Save the file

6. Load the file

7. Display record on order

8. Sort to make new file

9. Quick seek record

10. Copy the file to new file

11. Quit

******************************************************

Enter you choice(0….11):

搜索更多相关主题的帖子: 学生成绩 数据库 
2007-09-16 15:34
kenny238
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-9-16
收藏
得分:0 
2007-09-16 16:52
sunyuantz
Rank: 1
等 级:新手上路
威 望:1
帖 子:407
专家分:0
注 册:2006-3-20
收藏
得分:0 
你自己会多少呢?哪些是你不会的呢?论坛里有相似的帖子你可以搜一下,也有相似的题目比如通讯录,你可以把源程序修改一下。作业还是要自己做的!

我不是名人,所以不要签名。等哪天我成名人了......你都认识我了还要签名干嘛!
2007-09-16 16:56
josen0205
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:307
专家分:52
注 册:2007-5-8
收藏
得分:0 

这个问题我写过一个类似的,平时上班时候没事情写的,代码有1500多行,你要的功能基本上都有,自己改改吧
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#include<malloc.h>
#include<time.h>
#include <direct.h>

#define ESC '\033'

typedef struct student{
char stu_num[15];
char stu_name[15];
float stu_grade;
int pagenum;//页码,便于分页显示
struct student *next;
}*link;//学生信息结点


struct stu_list{
link head;
int len;
int page;
};//学生链表

typedef struct user{
char username[15];
char mm[15];
struct user *next;
}*user_link;//用户信息结点

struct user_list{
user_link head;
int len;
};//用户链表

int o_str(char *str);//输出字符串
int v_line(int n);//画表格线
int i_sleep(int n);//延迟n秒函数
char main_menu();//主界面
int init();//初始化
int check_s();//检查文件student.dat是否存在,不存在则创建
int check_u();//检查文件user.dat是否存在,不存在则创建
int i_mm(char *mm,int n);//输入密码
char log_menu();//登录界面
int login();//用户登录
int init_userlist(user_list &u_list);//创建用户链表
int free_userlist(user_list &u_list);//释放用户链表
int insert_user(user_list &u_list,user_link u);//插入用户信息到链表尾
int user_zc(user_list &u_list,char *checkfile);//用户注册
int open_checkfile(user_list &u_list,char *checkfile);//读取登录信息文件
int save_checkfile(user_list &u_list,char *checkfile);//保存用户注册信息
int check();//检验用户登录
int init_list(stu_list &s_list);//创建学生链表
int free_list(stu_list &s_list);//释放学生链表
link get_maxgrade(stu_list &s_list);//找出链表中成绩最大结点,返回并删除该结点
link get_minnum(stu_list &s_list);//找出链表中学号最小的结点,返回并删除该结点
int ismin(char *str1,char *str2);//比较两个等长数字字符串的大小
int insert_s(stu_list &s_list,link stu);//将新的学生信息插入到链表尾
int delete_s(stu_list &s_list,char *num);//按照学号删除
int get_stu(stu_list &s_list);//输入学生的信息,插入学生链表中
int list_copy(stu_list s,stu_list &s_new);//将s表中的信息拷贝到s_new中
int print_stu(stu_list s_list);//打印输出学生信息
int printlist(stu_list L,int page);//显示指定页学生信息
int showresult(stu_list L);//分页显示学生链表中学生信息
int open_file(stu_list &s_list,char *FileName);//打开文件FileName将信息读入链表
int save_stu(stu_list s_list,char *FileName);//保存输入的学生信息到文件FileName
int add_stu(char *FileName);//添加单个学生记录到文件FileName
int update_stu(char *FileName);//修改学生记录
int read_all(char *FileName);//浏览全部学生信息
int sort_stu(char *FileName);//查询学生信息
int delete_stu(char *FileName);//删除学生记录
char order_menu();//排序主界面
int order();//排序主函数
int order_num();//生成按学号排序文件
int order_grade();//生成按成绩排序文件
int order_view();//浏览排序文件

int o_str(char *str)
{
printf("\n\t\t\t%s",str);
return 0;
}

int v_line(int n)
{
if(n==1)
printf("\n\t ━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
if(n==2)
printf("\n\t ┣━━━━╋━━━━━━━━╋━━━━━━╋━━━━━━┫");
if(n==3)
printf("\n\t ┏━━━━┳━━━━━━━━┳━━━━━━┳━━━━━━┓");
if(n==4)
printf("\n\t ┗━━━━┻━━━━━━━━┻━━━━━━┻━━━━━━┛");
return 0;
}

int i_sleep(int n)//延迟n秒函数
{
time_t start,end;
start=time(NULL);
end=time(NULL);
while(end-start<n)
{
end=time(NULL);
}
return 0;
}

char main_menu()
{
char ch;
system("cls");
printf("\n\n\n");
printf("\t\t ———————————————————————— \n");
printf("\t\t|      学生个人信息管理系统       |\n");
printf("\t\t|———————————————————————|\n");
printf("\t\t|       1.添加个人信息         |\n");
printf("\t\t|                       |\n");
printf("\t\t|       2.修改个人信息         |\n");
printf("\t\t|                       |\n");
printf("\t\t|       3.查询个人信息         |\n");
printf("\t\t|                       |\n");
printf("\t\t|       4.浏览所有信息         |\n");
printf("\t\t|                       |\n");
printf("\t\t|       5.删除个人信息         |\n");
printf("\t\t|                       |\n");
printf("\t\t|       6.排 序        |\n");
printf("\t\t|                       |\n");
printf("\t\t|       7.退 出 系 统         |\n");
printf("\t\t ————————————————————————\n");
printf("\t\t 请您正确选择:");
ch=getchar();
return ch;
}

[此贴子已经被作者于2007-9-17 18:08:27编辑过]


只有想不到,没有做不到
2007-09-17 17:53
josen0205
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:307
专家分:52
注 册:2007-5-8
收藏
得分:0 

int check_s()
{
FILE *fp_r;
if((fp_r=fopen("data/student.dat","r"))==NULL)
{
FILE *fp_w;
o_str("student.dat文件不存在!");
o_str("正在创建student.dat文件...");
system("mkdir data");
i_sleep(1);
if((fp_w=fopen("data/student.dat","w"))==NULL)
{
o_str("创建文件student.dat失败!");
getch();
return -1;
}
fprintf(fp_w,"学生总数:%d|\n",0);
fclose(fp_w);
o_str("创建user.dat文件成功!");
i_sleep(1);
return 0;
}
fclose(fp_r);
return 0;
}

int check_u()
{
FILE *fp_r;
if((fp_r=fopen("data/user.dat","r"))==NULL)
{
FILE *fp_w;
o_str("user.dat文件不存在!");
o_str("正在创建user.dat文件...");
i_sleep(1);
if((fp_w=fopen("data/user.dat","w"))==NULL)
{
o_str("创建文件user.dat失败!");
getch();
return -1;
}
fprintf(fp_w,"用户总数:%d|\n",0);
fclose(fp_w);
o_str("创建user.dat文件成功!");
i_sleep(1);
return 0;
}
fclose(fp_r);
return 0;
}

int init()
{
printf("\n\n\n\n");
o_str("初始化中请等待...");
i_sleep(1);

if(check_s()<0)
return -1;
if(check_u()<0)
return -1;
return 0;
}

int i_mm(char *mm,int n)
{
int i=0,a;
while((a=getch())!='\r'&&i<n)
{
mm[i]=a;
printf("*");
i++;
}
mm[i]='\0';
return 0;
}

int check()
{
int i=0;
char mm[15],username[15];
user_list u_list;
user_link p;
init_userlist(u_list);
open_checkfile(u_list,"data/user.dat");
while(i<3)
{
system("cls");
p=u_list.head;
if(p->next==NULL)
{
printf("\n\n\n");
printf("\t\t 暂无用户注册,请先注册,按任意键返回...");
getch();
return -1;
}
printf("\n\n\n");
printf("\t\t 请输入用户名:");
scanf("%s",username);
printf("\n\t\t 请输入密 码:");
i_mm(mm,15);
while(p->next)
{
p=p->next;
if(strcmp(p->username,username)==0)
break;
}
if(p->next==NULL)
{
if(strcmp(p->username,username)==0)
{
if(strcmp(p->mm,mm)!=0)
{
printf("\n");
o_str("密码错误!");
i++;
getch();
}
else
{
free_userlist(u_list);
return 0;
}
}
else
{
printf("\n");
o_str("用户名错误,无此用户!");
i++;
getch();
}
}
else
{
if(strcmp(p->mm,mm)!=0)
{
printf("\n");
o_str("密码错误!");
i++;
getch();
}
else
{
free_userlist(u_list);
return 0;
}
}
}
free_userlist(u_list);
return -1;
}


只有想不到,没有做不到
2007-09-17 17:54
josen0205
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:307
专家分:52
注 册:2007-5-8
收藏
得分:0 

int init_userlist(user_list &u_list)//创建用户链表
{
u_list.head=(user_link)malloc(sizeof(struct user));
if(u_list.head==NULL)
{
o_str("动态分配内存失败,创建链表失败!");
return -1;
}
u_list.head->next=NULL;
u_list.len=0;
return 0;
}

int free_userlist(user_list &u_list)//释放用户链表
{
user_link p,s;
p=u_list.head;
while(p)
{
s=p;
p=p->next;
free(s);
}
return 0;
}

int insert_user(user_list &u_list,user_link u)//插入用户信息到链表尾
{
user_link p;
p=u_list.head;
while(p->next)
{
p=p->next;
}
p->next=u;
u->next=NULL;
u_list.len++;
return 0;
}

int user_zc()//用户注册
{
char mm1[15],mm2[15],username[15];
int flag=0;
user_list u_list;
user_link u,p;
init_userlist(u_list);
open_checkfile(u_list,"data/user.dat");
while(1)
{
system("cls");
p=u_list.head->next;
printf("\n\n\n");
printf("\t\t 请输入用户名:");
scanf("%s",username);
while(p)
{
if(strcmp(p->username,username)==0)
{
flag=1;
break;
}
flag=0;
p=p->next;
}
if(flag==1)
{
o_str("该用户名已经存在,按任意键继续...");
getch();
continue;
}
printf("\n\t\t 请输入密 码:");
i_mm(mm1,15);
printf("\n\t\t 确 认 密 码:");
i_mm(mm2,15);

if(strcmp(mm1,mm2)!=0)
{
o_str("两次输入密码必须一致!");
getch();
continue;
}
if((u=(user_link)malloc(sizeof(struct user)))==NULL)
{
printf("\n\n\n");
o_str("动态分配内存失败!");
getch();
return -1;
}
strcpy(u->username,username);
strcpy(u->mm,mm1);
insert_user(u_list,u);
break;
}
save_checkfile(u_list,"data/user.dat");
free_userlist(u_list);
o_str("注册成功,按任意键继续...");
getch();
return 0;
}

int open_checkfile(user_list &u_list,char *checkfile)//读取登录信息文件
{
FILE *fp_r;
char buf[40];
user_link u;
printf("\n\n\n\n");
if((fp_r=fopen(checkfile,"r"))==NULL)
{
o_str("打开user.dat文件失败!");
getch();
return -1;
}
memset(buf,0,sizeof(buf));
fgets(buf,40,fp_r);//读取用户个数
memset(buf,0,sizeof(buf));
while(fgets(buf,40,fp_r)!=NULL)
{
u=(user_link)malloc(sizeof(struct user));
if(u==NULL)
{
o_str("动态分配内存失败!");
getch();
return -1;
}
strcpy(u->username,strtok(buf,"|"));
strcpy(u->mm,strtok(NULL,"|"));
insert_user(u_list,u);
memset(buf,0,sizeof(buf));
}
fclose(fp_r);
return 0;
}

int save_checkfile(user_list &u_list,char *checkfile)//保存用户注册信息
{
FILE *fp_w;
user_link p;
p=u_list.head;
p=p->next;
if((fp_w=fopen(checkfile,"w"))==NULL)
{
o_str("打开文件失败!");
getch();
return -1;
}
fprintf(fp_w,"用户总数:%d|\n",u_list.len);
while(p)
{
fprintf(fp_w,"%s|%s|\n",p->username,p->mm);
p=p->next;
}
fclose(fp_w);
return 0;
}


只有想不到,没有做不到
2007-09-17 17:55
josen0205
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:307
专家分:52
注 册:2007-5-8
收藏
得分:0 

char log_menu()//用户登录
{
system("cls");
char ch;
printf("\n\n\n\n\n");
printf("\t\t ———————————————————————— \n");
printf("\t\t|      学生个人信息管理系统登录      |\n");
printf("\t\t|———————————————————————|\n");
printf("\t\t|        1.登 录          |\n");
printf("\t\t|                       |\n");
printf("\t\t|        2.注 册          |\n");
printf("\t\t|                       |\n");
printf("\t\t|        3.退 出          |\n");
printf("\t\t ————————————————————————\n");
printf("\t\t 请您正确选择:");
ch=getchar();
fflush(stdin);
return ch;
}

int login()
{
system("cls");
char ch;
while(1)
{
ch=log_menu();
switch(ch)
{
case '1':
if(check()==0)
return 0;
else
break;
case '2':
user_zc();
break;
case '3':
return -1;
default :
break;
}
}
}

int init_list(stu_list &s_list)//创建链表
{
s_list.head=(link)malloc(sizeof(struct student));
if(s_list.head==NULL)
{
o_str("动态分配内存失败,创建链表失败!");
getch();
return -1;
}
s_list.head->next=NULL;
s_list.len=0;
s_list.page=0;
return 0;
}

int free_list(stu_list &s_list)//释放链表
{
link p,s;
p=s_list.head;
while(p)
{
s=p;
p=p->next;
free(s);
}
return 0;
}

int insert_s(stu_list &s_list,link stu)//将新的学生信息插入到链表尾
{
link p;
p=s_list.head;
while(p->next)
{
p=p->next;
}
p->next=stu;
stu->next=NULL;
s_list.len++;
if((s_list.len-1)%8==0)
s_list.page++;
return 0;
}

link get_maxgrade(stu_list &s_list)//找出链表中最大的数,返回并删除该节点
{
link p,s,q;
float temp;
p=s_list.head->next;
q=s_list.head;
if(s_list.head->next==NULL)
{
o_str("学生链表为空,按任意键继续...");
getch();
return (NULL);
}
temp=s_list.head->next->stu_grade;
while(p)
{
if(p->stu_grade>temp)
temp=p->stu_grade;
p=p->next;
}
while(q->next)
{
if(q->next->stu_grade==temp)
break;
q=q->next;
}
s=q->next;
q->next=q->next->next;
s_list.len--;
return s;
}

link get_minnum(stu_list &s_list)//找出链表中学号最小的结点,返回并删除该结点
{
link p,s,q;
char *temp;
p=s_list.head->next;
q=s_list.head;
if(s_list.head->next==NULL)
{
o_str("学生链表为空,按任意键继续...");
getch();
return (NULL);
}
temp=s_list.head->next->stu_num;
while(p)
{
if(ismin(p->stu_num,temp)==0)
temp=p->stu_num;
p=p->next;
}
while(q->next)
{
if(strcmp(q->next->stu_num,temp)==0)
break;
q=q->next;
}
s=q->next;
q->next=q->next->next;
s_list.len--;
return s;
}

int ismin(char *str1,char *str2)//比较两个等长数字字符串的大小
{
int i=0;
char buf1[2],buf2[2];

while(str1[i]!='\0'&&str2[i]!='\0')
{
memset(buf1,0,sizeof(buf1));
memset(buf2,0,sizeof(buf2));
sprintf(buf1,"%c",str1[i]);
sprintf(buf2,"%c",str2[i]);
if(atoi(buf1)<atoi(buf2))
return 0;
if(atoi(buf1)>atoi(buf2))
return -1;
i++;
}
return -1;
}


只有想不到,没有做不到
2007-09-17 17:55
josen0205
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:307
专家分:52
注 册:2007-5-8
收藏
得分:0 

int delete_s(stu_list &s_list,char *num)//按照学号删除
{
link p,s;
p=s_list.head;
if(s_list.head->next==NULL)
o_str("学生表为空!");
while(p->next)
{
if(strcmp(p->next->stu_num,num)==0)
break;
p=p->next;
}
if(p->next==NULL)
o_str("无此记录!");
s=p->next;
p->next=p->next->next;
s_list.len--;
free(s);
return 0;
}

int get_stu(stu_list &s_list)//输入学生的信息,插入学生链表中
{
link stu_temp;
stu_temp=(link)malloc(sizeof(struct student));
if(stu_temp==NULL)
{
o_str("动态分配内存失败!");
return -1;
}
printf("\n\n\n\t\t请输入学生学号:");
scanf("%15s",&stu_temp->stu_num);
printf("\t\t请输入学生姓名:");
scanf("%15s",&stu_temp->stu_name);
printf("\t\t请输入学生成绩:");
scanf("%f",&stu_temp->stu_grade);
insert_s(s_list,stu_temp);
return 0;
}

int list_copy(stu_list s,stu_list &s_new)//将s表中的信息拷贝到s_new中
{
init_list(s_new);
link p;
p=s.head;
while(p!=NULL)
{
p=p->next;
insert_s(s_new,p);
}
return 0;
}

int print_stu(stu_list s_list)//打印输出学生信息
{
int i=0;
link p;
p=s_list.head;
p=p->next;
if(s_list.len==0)
{
printf("\n\n\t\t\t学生记录表为空");
return -1;
}
printf("\n\n\t\t\t共有%d个学生,信息如下:",s_list.len);
v_line(3);
printf("\n\t ┃%8s┃%16s┃%12s┃%12s┃","序 号","学 号","姓 名","成 绩");
while(p)
{
i++;
v_line(2);
printf("\n\t ┃%8d┃%16s┃%12s┃%12.2f┃",i,p->stu_num,p->stu_name,p->stu_grade);
p=p->next;
}
v_line(4);
return 0;
}

int printlist(stu_list L,int page)
{
link p;
int i=0;
if(L.len==0)
{
o_str("学生链表为空!\n\t\t\t");
getch();
return -1;
}
p=L.head->next;
printf("\n\t\t 向上翻页 P 向下翻页 N 退出 ESC\n");
printf("\n\t\t共有%3d个学生,信息如下: 共%3d页 第%3d页",L.len,L.page,page);
v_line(3);
printf("\n\t ┃%8s┃%16s┃%12s┃%12s┃","序 号","学 号","姓 名","成 绩");
while(p)
{
if(p->pagenum==page)
{
v_line(2);
printf("\n\t ┃%8d┃%16s┃%12s┃%12.2f┃",i+1,p->stu_num,p->stu_name,p->stu_grade);
}
p=p->next;
i++;
}
v_line(4);
return 0;
}

int showresult(stu_list L)
{
int page=1;
char ch;
printlist(L,page);
while(1)
{
ch=getch();
switch(ch)
{
case 'p':
page--;
system("cls");
if(page==0)
{
page++;
printlist(L,page);
}
else
printlist(L,page);
break;
case 'n':
page++;
system("cls");
if(page>L.page)
{
page--;
printlist(L,page);
}
else
printlist(L,page);
break;
case ESC:
o_str(" ");
return -1;
default :
break;
}
}
return 0;
}


只有想不到,没有做不到
2007-09-17 17:56
josen0205
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:307
专家分:52
注 册:2007-5-8
收藏
得分:0 

int open_file(stu_list &s_list,char *FileName)//打开文件FileName将信息读入链表
{
FILE *fp_r;
char buf_temp[40];
int i=0;
link i_temp;
memset(buf_temp,0,sizeof(buf_temp));
if((fp_r=fopen(FileName,"r"))==NULL)
{
o_str("打开文件失败");
getch();
return -1;
}
fgets(buf_temp,40,fp_r);//读取学生个数
memset(buf_temp,0,sizeof(buf_temp));
while((fgets(buf_temp,40,fp_r))!=NULL)//读取学生信息
{
i_temp=(link)malloc(sizeof(struct student));
if(i_temp==NULL)
{
o_str("动态分配内存失败!");
getch();
return -1;
}
strcpy(i_temp->stu_num,strtok(buf_temp,"|"));
strcpy(i_temp->stu_name,strtok(NULL,"|"));
i_temp->stu_grade=(float)atof(strtok(NULL,"|"));
i_temp->pagenum=i/8+1;
memset(buf_temp,0,sizeof(buf_temp));
insert_s(s_list,i_temp);
i++;
}
if(i==0)
{
o_str("文件中无学生记录,按任意键继续...");
getch();
return -1;
}
fclose(fp_r);
return 0;
}

int save_stu(stu_list s_list,char *FileName)//保存输入的学生信息到文件FileName
{
FILE *fp_w;
link p;
p=s_list.head;
p=p->next;
if(p==NULL)
{
o_str("无学生数据,按任意键继续...");
if((fp_w=fopen(FileName,"w"))==NULL)
printf("\n\t\t\t打开文件 %s 错误!",FileName);
fprintf(fp_w,"学生总数:%d|\n",s_list.len);//保存学生数
fclose(fp_w);
getch();
return 0;
}
o_str("正在保存...");
i_sleep(1);
if((fp_w=fopen(FileName,"w"))==NULL)
printf("\n\t\t\t打开文件 %s 错误!",FileName);
else
{
fprintf(fp_w,"学生总数:%d|\n",s_list.len);//保存学生数

while(p->next!=NULL)//保存学生信息
{
fprintf(fp_w,"%s|%s|%5.2f|\n",p->stu_num,p->stu_name,p->stu_grade);
p=p->next;
}
fprintf(fp_w,"%s|%s|%5.2f|\n",p->stu_num,p->stu_name,p->stu_grade);
fclose(fp_w);
o_str("保存成功!");
}
i_sleep(1);
return 0;
}

int add_stu(char *FileName)//添加单个学生记录到文件FileName
{
stu_list s_list;
init_list(s_list);
system("cls");
open_file(s_list,FileName);
system("cls");
while(1)
{
get_stu(s_list);
printf("\n\t\t是否继续添加Y/N?:");
if((getchar()=='Y')||(getchar()=='y'))
continue;
else
break;
}
printf("\n\t\t是否保存修改Y/N?:");
if((getchar()=='Y')||(getchar()=='y'))
{
save_stu(s_list,FileName);
}
free_list(s_list);
return 0;
}

int update_stu(char *FileName)//修改学生记录
{
stu_list s_list,list_temp;
char num[15];
char name_new[15];
float grade_new;
init_list(s_list);
init_list(list_temp);
system("cls");
if(open_file(s_list,FileName)<0)
{
free_list(s_list);
free_list(list_temp);
return -1;
}
system("cls");
link p,s,q;
p=s_list.head;
p=p->next;
q=s_list.head->next;
o_str("请输入学生学号:");
scanf("%15s",&num);

while(p)//查找学号为num的学生
{
if(strcmp(num,p->stu_num)==0)
{
s=(link)malloc(sizeof(struct student));
if(s==NULL)
{
o_str("动态分配内存失败!");
return -1;
}
strcpy(s->stu_num,p->stu_num);
strcpy(s->stu_name,p->stu_name);
s->stu_grade=p->stu_grade;
insert_s(list_temp,s);
}
p=p->next;
}
if(list_temp.len==0)
{
o_str("没有符合条件的学生记录,按任意键返回...");
getch();
return -1;
}
if(list_temp.len>1)
{
o_str("学号不唯一,错误,按任意键返回...");
getch();
return -1;
}
if(print_stu(list_temp)<0)
{
free_list(list_temp);
o_str("按任意键返回....");
getch();
return -1;
}
o_str("请输入学生姓名:");
scanf("%15s",&name_new);
o_str("请输入学生成绩:");
scanf("%f",&grade_new);
while(q)
{
if(strcmp(num,q->stu_num)==0)
break;
q=q->next;
}
memset(q->stu_name,0,sizeof(q->stu_name));
strcpy(q->stu_name,name_new);
q->stu_grade=grade_new;
o_str("确认保存修改吗?N/Y:");
if(getchar()=='Y'||getchar()=='y')
{
save_stu(s_list,FileName);
free_list(list_temp);
free_list(s_list);
}
else
{
o_str("您没有做任何修改!按任意键继续...");
free_list(list_temp);
free_list(s_list);
getch();
}
o_str("修改完毕,按任意键继续...");
getch();
return 0;
}


只有想不到,没有做不到
2007-09-17 17:56
josen0205
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:307
专家分:52
注 册:2007-5-8
收藏
得分:0 

int read_all(char *FileName)
{
system("cls");
stu_list s_list;
init_list(s_list);
if(open_file(s_list,FileName)<0)
{
free_list(s_list);
return -1;
}
system("cls");
showresult(s_list);
free_list(s_list);
printf("\t 按任意键继续...");
getch();
return 0;
}

int sort_stu(char *FileName)
{
int flag;
char ch;
char num[15];
char name[15];
float grade;
stu_list s_list,list_temp;
init_list(s_list);

memset(num,0,sizeof(num));
memset(name,0,sizeof(name));
system("cls");
if(open_file(s_list,FileName)<0)
{
free_list(s_list);
return -1;
}

system("cls");
while(1)
{
printf("\n\n\n\n");
printf("\t\t ————————————————————————\n");
printf("\t\t|       学生个人信息查询        |\n");
printf("\t\t|———————————————————————|\n");
printf("\t\t|        1.按学号查询         |\n");
printf("\t\t|                       |\n");
printf("\t\t|        2.按姓名查询         |\n");
printf("\t\t|                       |\n");
printf("\t\t|        3.按成绩查询         |\n");
printf("\t\t|                       |\n");
printf("\t\t|        4.退 出查询         |\n");
printf("\t\t ————————————————————————\n");
printf("\t\t 请您正确选择:");
ch=getchar();
system("cls");
switch(ch)
{
case '1':
{
int i=0;
init_list(list_temp);
flag=0;
link p,s;
p=s_list.head;
p=p->next;
printf("\n\n");
printf("\t 请输入学生学号:");
scanf("%15s",&num);
while(p)//查找学号为num的学生
{
if(strcmp(num,p->stu_num)==0)
{
s=(link)malloc(sizeof(struct student));
if(s==NULL)
{
o_str("动态分配内存失败!");
getch();
return -1;
}
strcpy(s->stu_num,p->stu_num);
strcpy(s->stu_name,p->stu_name);
s->stu_grade=p->stu_grade;
s->pagenum=i/8+1;
i++;
insert_s(list_temp,s);
}
p=p->next;
}
if(list_temp.len==0)
printf("\n\t 没有符合条件的学生!");
else
{
system("cls");
showresult(list_temp);
}
free_list(list_temp);
printf("\t 按任意键继续...");
getch();
system("cls");
}
break;
case '2':
{
init_list(list_temp);
flag=0;
int i=0;
link p,s;
p=s_list.head;
p=p->next;
printf("\n\n");
printf("\t 请输入学生姓名:");
scanf("%15s",&name);
while(p)//查找学号为num的学生
{
if(strcmp(name,p->stu_name)==0)
{
s=(link)malloc(sizeof(struct student));
if(s==NULL)
{
o_str("动态分配内存失败!");
return -1;
}
strcpy(s->stu_num,p->stu_num);
strcpy(s->stu_name,p->stu_name);
s->stu_grade=p->stu_grade;
s->pagenum=i/8+1;
i++;
insert_s(list_temp,s);
}
p=p->next;
}
if(list_temp.len==0)
printf("\n\t 没有符合条件的学生!");
else
{
system("cls");
showresult(list_temp);
}
free_list(list_temp);
printf("\t 按任意键继续...");
getch();
system("cls");
}
break;
case '3':
{
init_list(list_temp);
flag=0;
int i=0;
link p,s;
p=s_list.head;
p=p->next;
printf("\n\n");
printf("\t 请输入学生成绩:");
scanf("%f",&grade);
while(p)
{
if(p->stu_grade==grade)
{
s=(link)malloc(sizeof(struct student));
if(s==NULL)
{
o_str("动态分配内存失败!");
return -1;
}
strcpy(s->stu_num,p->stu_num);
strcpy(s->stu_name,p->stu_name);
s->stu_grade=p->stu_grade;
s->pagenum=i/8+1;
i++;
insert_s(list_temp,s);
}
p=p->next;
}
if(list_temp.len==0)
printf("\n\t 没有符合条件的学生!");
else
{
system("cls");
showresult(list_temp);
}
free_list(list_temp);
printf("\t 按任意键继续...");
getch();
system("cls");
}
break;
case '4':
flag=1;
break;
default:
break;
}
if(flag==1)
break;
else
continue;
}
free_list(s_list);
return 0;
}

int delete_stu(char *FileName)//删除学生记录
{
system("cls");
char num[15];
stu_list s_list,list_temp;
init_list(s_list);
init_list(list_temp);
system("cls");
if(open_file(s_list,FileName)<0)
{
free_list(s_list);
free_list(list_temp);
return -1;
}
system("cls");
link p,s;
p=s_list.head;
p=p->next;
o_str("请输入学生学号:");
scanf("%15s",&num);

while(p)//查找学号为num的学生
{
if(strcmp(num,p->stu_num)==0)
{
s=(link)malloc(sizeof(struct student));
if(s==NULL)
{
o_str("动态分配内存失败!");
return -1;
}
strcpy(s->stu_num,p->stu_num);
strcpy(s->stu_name,p->stu_name);
s->stu_grade=p->stu_grade;
insert_s(list_temp,s);
}
p=p->next;
}
if(print_stu(list_temp)<0)
{
free_list(list_temp);
o_str("按任意键返回....");
getch();
return -1;
}
free_list(list_temp);
o_str("确认删除吗 Y/N?:");
if((getchar()=='Y')||(getchar()=='y'))
{
delete_s(s_list,num);
s_list.len--;
o_str("删除成功!");
save_stu(s_list,FileName);
o_str("按任意键继续...");
getch();
}
return 0;
}


只有想不到,没有做不到
2007-09-17 17:56
快速回复:[求助]有关学生成绩管理的一道题目
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019227 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved