求c语言设计的一个学生学籍管理系统!急用!要有查询 增加 删除 修改功能!简单一点的就好了!急用啊!

这两天就要用啊!如果能加上实训报告更好啊!

自己修改,我以前做的
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
char num[10];
char name[10];
int score[5];/*score[0]存数学成绩score[1]语文成绩score[2]英语成绩score[3]总分score[4]平均分*/
struct node *next;
}student;/*学生成绩结构体*/
/*初始化结构体*/
student *init(student *t)
{
t=(student *)malloc(sizeof(student));
t->next=NULL;
t->score[4]=t->score[3]=t->score[0]=t->score[1]=t->score[2]=0;
return t;
}
/*保存数据*/
void save(student *stu)
{
FILE *fp;
if((fp=fopen( "score1","w"))==NULL)/*为输出打开文件score1*/
{
printf("cannot open file\n");exit(0);
}
stu=stu->next;
while(stu!=NULL)
{
if(fwrite(stu,sizeof(student),1,fp)!=1)
printf("file write error\n");
stu=stu->next;
}
fclose(fp);
}
/*读取数据*/
student * load(student *stu)
{
FILE *fp;student *p,*r;r=stu;
if((fp=fopen("score1","r"))==NULL)/*为输入打开文件score1*/
return stu;
do
{ p=(student *)malloc(sizeof(student));
p->next=NULL;
if((fread(p,sizeof(student),1,fp)!=1));
r->next=p;
r=r->next;
}while(1);

}
/*输出一个特定的学生的成绩*/
void output1(student *t)
{ int k;
printf("%s\t%s\t",t->num,t->name);
for(k=0;k<5;k++)
printf("%d\t",t->score[k]);
printf("\n");
}
/*输出全体学生的成绩*/
void output(student *stu)
{
stu=stu->next;
printf("学号\t姓名\t数学\t语文\t英语\t总分\t平均分\n");
while(stu!=NULL)
{
output1(stu);
stu=stu->next;
}

}
/*将stu后插在t中*/
student * charu(student *stu,student *t)
{student *p;int k;
p=(student *)malloc(sizeof(student));
strcpy(p->num,stu->num);
strcpy(p->name,stu->name);
for(k=0;k<5;k++)
p->score[k]=stu->score[k];
p->next=t->next;
t->next=p;
return p;
}
/*按成绩排序*/
void paixu(student *stu,int i)
{
student *t,*p,*r;
int j,k;p=stu;
printf("输入0按数学成绩\n");
printf("输入1按语文成绩\n");
printf("输入2按英语成绩\n");
printf("输入3按总分\n");
printf("输入4按平均分\n");
do
{
scanf("%d",&j);
if(j<0&&j>4) printf("输入错误请重新输入\n");
else break;
}while(1);
t=init(t);
r=t;
stu=stu->next;
if(t->next==NULL)
r=charu(stu,t);/*在排序好的链表t中插入第一个节点*/
if(i==0)/*按升序排序*/
while(stu->next!=NULL)
{
stu=stu->next;
if(r->score[j]>stu->score[j]) r=t;/*如果待插入的score[j]<当前的score[j],指针r回溯*/
while(r->next->score[j]<stu->score[j]&&r->next!=NULL)
r=r->next;/*找到比待插入的score[j]大的指针r->next*/
r=charu(stu,r);/*在r后面插入stu*/
}
else
while(stu->next!=NULL)
{
stu=stu->next;

if(r->score[j]<stu->score[j]) r=t;
while(r->next->score[j]>stu->score[j]&&r->next!=NULL)
r=r->next;
r=charu(stu,r);
}
output(t);
}
/*排序菜单*/
void output2(student *stu)
{ int i;
output(stu);
printf("输入 0 升序\n");
printf("输入 1 降序\n");
printf("输入其他任意字符退出\n");
scanf("%d",&i);
if(i==0||i==1)
paixu(stu,i);
printf("输入任意字符结束\n");
getch();

}
/*查找学生号为num是否存在*/
student * findnum(char *num,student *t,int *i)
{
*i=1;
if(t->next==NULL)
return t;
else
{
*i=strcmp(t->next->num,num);
while(*i<0)/*t->next->num<num时查找下一个*/
{
t=t->next;
if(t->next==NULL)
return t;
*i=strcmp(t->next->num,num);
}
}
return t;/*t->next->num>=num时返回,此时i>=0*/
}
/*插入一个学生信息*/
student * insertstu(char *num,student *stu,char *name)
{ student *p,*t;int *i,j;i=&j;
t=findnum(num,stu,i);/*查找该学号是否存在*/
if(j!=0)/*该学号不存在,则插入*/
{
p=init(p);
strcpy(p->num,num);
strcpy(p->name,name);
p->next=t->next;
t->next=p;
return stu;
}
else

}
/*录入新学生信息*/
void base(student *stu)
{
char num[10],name[20];
printf("输入e结束输入新学生的信息\n");
printf("num(不超过10个数)\tname(不超过10个字)\n");
scanf("%s",num);
do
{
printf("\t\t\t");
scanf("%s",name);
stu=insertstu(num,stu,name);/*插入一个学生信息*/
scanf("%s",num);
}while(num[0]!='e');
output(stu);
printf("输入任意字符退出\n");
getch();
}
/*增加修改一门课程成绩*/
void zengjia(student *t,int i)
{
t->score[3]-=t->score[i];/*总分减去第i门课的成绩*/
scanf("%d",&(t->score[i]));/*输入第i门课的成绩*/
t->score[3]+=t->score[i];/*总分加上第i门课的成绩*/
}
void deletegrade(student *t,int i)
{
t->score[3]-=t->score[i];/*总分减去第i门课的成绩*/
t->score[i]=0;/*第i门课的成绩归零*/
}
/*修改成绩*/
void altergrade(student *stu)
{
int j,*i;student *t;char a,*num;
i=&j;
printf("0 修改数学成绩\n");
printf("1 修改语文成绩\n");
printf("2 修改英语成绩\n");
printf("3 删除数学成绩\n");
printf("4 修改语文成绩\n");
printf("5 修改英语成绩\n");
printf("输入 e 结束操作\n");
a=getch();
printf("学号\t成绩\n");
scanf("%s",num);
while(num[0]!='e')
{
t=findnum(num,stu,i);/*按学生号查找学生信息*/
if(j==0)/*学生号存在*/
{
t=t->next;
switch(a)
{
case '0':
zengjia(t,0);
break;
case '1':
zengjia(t,1);
break;
case '2':
zengjia(t,2);
break;
case '3':
deletegrade(t,0);
break;
case '4':
deletegrade(t,1);
break;
case '5':
deletegrade(t,2);
break;
default:break;
}
t->score[4]=t->score[3]/3;
}
else
printf("无此学号\n");
scanf("%s",num);
}
output(stu);
printf("输入任意字符结束\n");
getch();
}
/*第i科成绩录入*/
student gradeenter(student *stu,int i)
{
student *t;t=stu;
t=t->next;
printf("学号\t该科成绩\n");
while(t!=NULL)
{
printf("%s\t",t->num);
if(t->score[i]==0)/*如果学号为t->num的同学该科成绩没有*/
{
scanf("%d",&t->score[i]);
t->score[3]+=t->score[i];/*学号为t->num的总分*/
t->score[4]=t->score[3]/3;/*学号为t->num的平均分*/
}
else
printf("%d\n",t->score[i]);
t=t->next;/*录入下一个同学的该科成绩*/

}
printf("该科全部输入完成\n输入任意字符结束\n");
getch();
}
/*成绩录入菜单*/
void entergrade(student *stu)
{
int i;
printf("0 录入数学成绩\n");
printf("1 录入语文成绩\n");
printf("2 录入英语成绩\n");
scanf("%d",&i);
switch(i)
{
case 0:gradeenter(stu,i);break;
case 1:gradeenter(stu,i);break;
case 2:gradeenter(stu,i);break;
default:printf("输入错误请输入相应操作的题号\n");
}

}
/*按学生号查找学生*/
void chaxun(student *stu)
{
char *num;int j,k,*i;student *t;i=&j;
printf("输入要查询的学生学号\n");
scanf("%s",num);
t=findnum(num,stu,i);/*查找学生号为num是否存在*/
if(j==0)/*该学生号存在*/
{
t=t->next;
printf("查询结果为\n");
printf("学号\t姓名\t数学\t语文\t英语\t总分\t平均分\n");
output1(t);/*输出此学生信息*/
}
else
printf("查无此号\n");
printf("输入任意字符结束\n");
getch();
}
/*统计全班人数和平均分*/
void tongji(student *stu)
{
int total=0,score=0;
stu=stu->next;
while(stu!=NULL)
{
score+=stu->score[3];
stu=stu->next;
total++;
}
score=score/total;
printf("班级总人数为:%d平均分为:%d\n输入任意字符退出\n",total,score);
getch();
}
/*按分数段查询*/
void fenshuduan(student *stu)
{
int i,min,max,j;
printf("输入0按数学分数段\n");
printf("输入1按语文分数段\n");
printf("输入2按英语分数段\n");
printf("输入3按总分分数段\n");
printf("输入4按平均分分数段\n");
scanf("%d",&i);
printf("输入分数段上限:");
scanf("%d",max);
printf("\n输入分数段下限:");
scanf("%d",min);
if(max<min)

stu=stu->next;
printf("学号\t姓名\t数学\t语文\t英语\t总分\t平均分\n");
while(stu!=NULL)
{
if(min<=stu->score[i]&&stu->score[i]<=max)/*将分数段内的同学信息输出*/
output1(stu);
stu=stu->next;
}

}
void main()
{
char a='8';
student *stu;
stu=init(stu);/*初始化stu*/
stu=load(stu);/*读取score1的数据*/
while(a!='7')
{
clrscr();
printf("************************************************************\n");
printf(" 学生成绩管理系统\n");
printf(" -------made in china\n");
printf(" \t0 录入学生基本信息\n");
printf(" \t1 修改或删除学生成绩\n");
printf(" \t2 录入学生成绩\n");
printf(" \t3 显示指定学生的信息\n");
printf(" \t4 输出指定分数段的学生信息\n");
printf(" \t5 输出班级总人数和平均分\n");
printf(" \t6 输出全体学生的信息\n");
printf(" \t7 退出\n");
printf("*************************************************************\n");
a=getch();
switch(a)
{
case'0':base(stu);break;
case'1':altergrade(stu);break;
case'2':entergrade(stu);break;
case'3':chaxun(stu);break;
case'4':fenshuduan(stu);break;
case'5':tongji(stu);break;
case'6':output2(stu);break;
case'7':break;
default:printf("i am sorry to hear that you enter the wrong num\n");
printf("按任意键重新输入\n");getch();continue;
}
}
save(stu);/*将数据保存在score1中*/
printf("欢迎再次使用学生成绩管理系统........请按任意键退出.......");
getch();
}
另外,站长团上有产品团购,便宜有保证
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-05
//这个是大一的时候写的通信录的题目有增 删 修改功能。
//你就把里面的值 修改一下变量就可以了。
1 #include<iostream>
2 #include<string.h>
3 using namespace std;
4 struct Friend
5 {
6 double num;
7 string name;
8 char sex;
9 string telnum;
10 string addr;
11 Friend *next;
12 };
13 Friend *head;
14 Friend *Create ()
15 {
16 Friend *ps;
17 Friend *pEnd;
18 ps = new Friend;
19 cout << " 请你输入朋友的编号:" << endl;
20 cin>>ps->num;
21 cout << " 请你输入朋友的姓名:"<<endl;
22 cin>>ps->name;
23 cout << " 请你输入朋友的性别:"<<endl;
24 cin>>ps->sex;
25 cout << " 请你输入朋友电话:" << endl;
26 cin>>ps->telnum;
27 cout << " 请你输入朋友的地址:" << endl;
28 cin>>ps->addr;
29 head = ps;
30 pEnd = ps;
31 cout<<" 是否继续输入:继续按Y ,退出按N "<<endl;
32 char m;
33 cin>>m;
34
35 if(m=='y'||m=='n'||m=='Y'||m=='N')
36 {
37 while (m=='y'||m=='Y' )
38 {
39 ps = new Friend;
40 cout << " 请你输入朋友的编号:" << endl;
41 cin>>ps->num;
42 cout << " 请你输入朋友的姓名:"<<endl;
43 cin>>ps->name;
44 cout << " 请你输入朋友的性别:"<<endl;
45 cin>>ps->sex;
46 cout << " 请你输入朋友电话:" << endl;
47 cin>>ps->telnum;
48 cout << " 请你输入朋友的地址:" << endl;
49 cin>>ps->addr;
50 pEnd->next = ps;
51 pEnd = ps;
52 char n;
53 cout<<" 是否继续输入:继续按Y ,退出按N "<<endl;
54 cin>>n;
55 if(n!='y'&&n!='Y')
56 m='N';
57 else
58 m='y';
59 }
60 }
61 else
62 cout<<" 对不起,你输入了非法数据。"<<endl;
63 pEnd->next = NULL;
64 return (head);
65 }
66
67 void chaxun(int num1,string name1) //
68 { int r=0;
69 if(head==NULL)
70 {
71 r++;
72 cout<<" 对不起,没有你所查找的朋友:"<<endl;
73 return;
74 }
75
76 for (Friend * pGuard = head; pGuard; pGuard = pGuard->next)
77 {
78 if (pGuard->num==num1)
79 {
80 r++;
81 cout<<" 你查找的朋友信息是:"<<endl;
82 cout<<pGuard->num<<" "<<pGuard->name<<" "<<pGuard->sex<<" "<<pG
uard->telnum<<" "<<pGuard->addr<<endl;
83 }
84 if( pGuard->name==name1)
85 {
86 r++;
87 cout<<" 你查找的朋友信息是:"<<endl;
88 cout<<pGuard->num<<" "<<pGuard->name<<" "<<pGuard->sex<<" "<<pGua
rd->telnum<<" "<<pGuard->addr<<endl;
89 }
90 }
91 if(r==0)
92 cout<<" 对不起,你输入了错误信息"<<endl;
93 }
94
95 void Delete (int number)
96 {
97 Friend *p;
98 if (head == NULL)
99 {
100 cout << "对不起,没有你所查找的朋友:" << endl;
101 return;
102 }
103
104 if (head->num == number)
105 {
106 p = head;
107 head = head->next;
108 delete p; //**************
109 cout << " 待删除的朋友已删除" << endl;
110 return;
111 }
112
113 for (Friend * pGuard = head; pGuard->next; pGuard = pGuard->next)
114 {
115 if (pGuard->next->num == number)
116 {
117 p = pGuard->next;
118 pGuard->next = p->next;
119 delete p;
120 cout << number << " 号已经删除 " << endl;
121 return;
122 }
123 }
124 cout << number << " 号没有找到" << endl;
125 }
126 void insert (Friend * Node)
127 {
128 if (head == NULL)
129 {
130 head = Node;
131 Node->next = NULL;
132 return;
133 }
134 else if (head->num > Node->num)
135 {
136 Node->next = head;
137 head = Node;
138 return; //****************************
139 }
140 Friend *pGuard = head;
141 while (pGuard->next && pGuard->next->num < Node->num)
142 pGuard = pGuard->next;
143 Node->next = pGuard->next;
144 pGuard->next = Node;
145 return;
146 }
147 void showlist (Friend * dhead)
148 {
149 cout << "************" << endl;
150 while (dhead != NULL)
151 {
152 cout << dhead->num << " " << dhead->name << " " << dhead->sex<<
" " << dhead->telnum <<" "<<dhead->addr<<endl;
153 dhead = dhead->next;
154 cout << endl;
155 }
156 }
157 int main ()
158 {
159 char i2,i3;
160 head = Create ();
161 showlist (head);
162
163 int t=0;
164 for(int i=0;i<=t;i++)
165 {
166 int i;
167 cout<<" 通讯录查询请按 1"<<endl;
168 cout<<" 通讯录插入请按 2"<<endl;
169 cout<<" 通讯录删除请按 3"<<endl;
170 cout<<" 退出请按 4 "<<endl;
171 cin>>i;
172 while(i!=1&&i!=2&&i!=3&&i!=4)
173 {
174 cout<<" 你输入了非法数据,请重新输入"<<endl;
175 cin>>i;
176 }
177
178 if(i==1|i==2||i==3||i==4)
179 {
180 string strChoice;
181 if(i==1)
182 {
183 do
184 {
185 cout<<" 请选择查询的方式:编号1,姓名2 "<<endl;
186 int jj;
187 cin>>jj;
188 string name2; //name
189 if(jj==1)
200 string name2;
201 cout<<" 请输入待查询的姓名:"<<endl;
202 cin>>name2;
203 chaxun(-1,name2);
204 }
205 cout<<" 是否继续查询:继续按Y ,退出按N "<<endl;
206 cin>>strChoice;
207 } while (strChoice=="y"||strChoice=="Y");
208 }
209
210 if(i==2)
211 {
212 string strChoice2;
213 do
214 {
215 Friend *Node;
216 Node = new Friend;
217 cout << " 请你输入朋友的编号:" << endl;
218 cin>>Node->num;
219 cout << " 请你输入朋友的姓名:"<<endl;
220 cin>>Node->name;
221 cout << " 请你输入朋友的性别:"<<endl;
222 cin>>Node->sex;
223 cout << " 请你输入朋友电话:" << endl;
224 cin>>Node->telnum;
225 cout << " 请你输入朋友的地址:" << endl;
226 cin>>Node->addr;
227 insert (Node);
228 showlist (head);
229 cout<<" 是否继续插入信息:继续按Y ,退出按N"<<endl;
230 cin>>strChoice2;
231 } while(strChoice2=="y"||strChoice2=="Y");
232
233 }
234
235 if(i==3)
236 {
237 string strChoice3;
238 do
239 {
240 int i;
241 cout << " 请你输入待删除同学的编号 :" << endl;
242 cin >> i;
243 Delete (i);
244 showlist (head); //end
245 cout<<" 是否继续进行删除 继续按Y 退出按N "<<endl;
246 cin>>strChoice3;
247 } while(strChoice3=="y"||strChoice3=="Y");
248 }
249
250 if(i==1||i==2||i==3)
251 { char x;
252 cout<<" 是否继续进行操作 继续按Y 退出按N "<<endl;
253 cin>>x;
254 if(x=='y'||x=='Y')
255 t++;
256 }
257
258 }
259 }
260 }本回答被提问者和网友采纳
相似回答