Ⅰ 急!求大神!!!利用C語言設計一個簡易的學生信息管理系統,包括 學號 姓名 性別 年齡四項。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define MAXLEN 100
#define Null 0
typedef struct node {
int num; // 學號
char name[MAXLEN]; // 姓名
struct node *next; // 指針域
}list;
list *creat()
{
list *head,*p,*r;
int i,n; // n 為學生人數
head=(list *)malloc(sizeof(list));
head->next=Null;
r=head;
printf("請輸入學生人數.\n");
scanf("%d",&n);
for(i=1;i<=n;i++) {
p=(list *)malloc(sizeof(list));
printf("請輸入學生學號:\n");
scanf("%d",&p->num);
printf("請輸入學生姓名:\n");
scanf("%s",&p->name);
p->next=Null;
r->next=p; // 這個地方我總是不明白,是怎樣讓結點下移一個的呢?
r=r->next;
}
return (head);
}
void find (list *h)
{
int k; // 要找的學生學號
list *p;
p=h->next;
printf("請輸入要查找的學生學號:\n");
scanf("%d",&k);
while (p && p->num!=k)
p=p->next;
if(p) {
printf("學號\t姓名\t\n");
printf("%d\t%s\t%d\n",p->num,p->name,p->score);
}
else
printf("目標沒找到\n");
}
list *del (list *h)
{
int k; // 要刪除的學生學號
list *p,*q; // 為什麼要兩個指針呢?
q=h;
p=h->next;
printf("請輸入待刪除的學生學號:\n");
scanf("%d",&k);
while (p && p->num!=k) {
q=p;
p=p->next;
}
if(p) {
q->next=p->next;
free(p);
}
else
printf("沒有此學生的記錄,無法刪除!\n");
return (h);
}
list *insert(list *h)
{
list *p,*q,*r,*head;
head=h;
r=h;
p=h->next;
// 下面構造一個學生的信息
q=(list *)malloc(sizeof(list));
printf("請輸入待插入學生的學號:\n");
scanf("%d",&q->num);
printf("請輸入待插入學生的姓名:\n");
scanf("%s",&q->name);
q->next=Null;
// 找到鏈表的結尾結點
while(p!=Null) {
r=p;
p=p->next;
}
// 將新結點插入表尾
r->next=q;
r=r->next;
return (head);
}
void output(list *h)
{
list *p;
printf("學號\t姓名\t\n");
p=h->next;
while (p!=NULL) {
printf("%d\t%s\t%d\n",p->num,p->name,p->score);
p=p->next;
}
}
void main()
{
list *p;
int k; // 控制循環的標志
while (1) {
printf(" ---------------------------------------\n");
printf(" | 學生成績管理系統 |\n");
printf(" ---------------------------------------\n");
printf(" | 1. 登記成績 |\n");
printf(" | 2. 查詢成績 |\n");
printf(" | 3. 插入成績 |\n");
printf(" | 4. 刪除成績 |\n");
printf(" | 0. 退出系統 |\n");
printf(" ---------------------------------------\n");
printf("請輸入你的選擇:\n");
scanf("%d",&k);
switch(k) {
case 1: p=creat(); break;
case 2: find(p); break;
case 3: p=insert(p); break;
case 4: p=del(p); break;
case 0: exit(0);
default : printf("選擇錯誤,重新開始!\n");
}
}// while
}
Ⅱ 學生信息管理系統編程(c語言)
挺好的一個題目啊
但我可不願意幫人寫作業
網上很多類似的,你可以參考下:
#include <stdio.h>
#include <string.h> struct student {
char name[30];
float math;
float chinese;
float english;
float average;
};
int MenuChoice(void);
int EnterAccount(void);
void Enter(struct student *fst);
void Amend(struct student *src);
void Delete(struct student *next);
void Print(struct student *out);
main()
{
struct student one[100] = {0}, *look = one;
int menu, t;
while ((menu = MenuChoice()) != 0)
if (menu >= 1 && menu <= 4 && (t = EnterAccount())) {
look = one + t;
switch (menu) {
case 1:
Enter(look);
break;
case 2:
if (strcmp(look->name, ""))
printf("學號:%d\n姓名: %s\n語文成績: %.1f\n數學成績:%.1f\n英語成績: %f\n平均"成績:%.1f\n",
t, look->name, look->chinese, look->math, look->english, look->average);
else
printf("對不起,該學號不存在!\n");
break;
case 3:
Amend(look);
break;
case 4:
Delete(look);
break;
}
}
else if (menu == 5)
Print(one);
else
printf("錯誤的請求!\n");
return 0;
}
int MenuChoice(void)
{
int choice;
printf("請選擇:\n"
"1 - 新建學生信息\n"
"2 - 查找學生信息\n"
"3 - 修改學生信息\n"
"4 - 刪除學生信息\n"
"5 - 列印學生信息\n"
"0 - 退出\n");
scanf("%d", &choice);
return choice;
}
int EnterAccount(void)
{
int ret;
printf("請輸入學號:\n");
scanf("%d", &ret);
if (ret >= 1 && ret <= 100)
return ret -1;
return 0;
}
void Enter(struct student *fst)
{
printf("請輸入學生姓名、語文成績、數學成績、英語成績和平均成績\n");
scanf("%s%f%f%f%f", fst->name, &fst->chinese, &fst->math, &fst->english, &fst->average);
}
void Amend(struct student *src)
{
int t;
printf("請選擇:\n"
"1 - 修改學生姓名\n"
"2 - 修改學生語文成績\n"
"3 - 修改學生數學成績\n"
"4 - 修改學生英語成績\n"
"5 - 修改學生平均成績\n");
scanf("%d", &t);
switch (t) {
case 1:
printf("請輸入學生的新名字\n");
scanf("%s", src->name);
break;
case 2:
printf("請輸入學生新的語文成績\n");
scanf("%f", &src->chinese);
break;
case 3:
printf("請輸入學生新的數學成績\n");
scanf("%f", &src->math);
break;
case 4:
printf("請輸入學生新的英語成績\n");
scanf("%f", &src->english);
break;
case 5:
printf("請輸入學生新的平均成績\n");
scanf("%f", &src->average);
break;
}
}
void Delete(struct student *next)
{
strcpy(next->name, "");
next->math = next->english = next->chinese = next->average = 0.0;
}
void Print(struct student *out)
{
struct student *up;
for (up = out; out < &up[100]; out++)
if (strcmp(out->name, ""))
printf("學號:%d\n姓名: %s\n語文成績: %.1f\n數學成績:%.1f\n英語成績: %.1f\n平均成績:%.1f\n",
out-up + 1, out->name, out->chinese, out->math, out->english, out->average);
}