c语言删除学生成绩记录
⑴ 求用C语言中的结构体编写的《学生成绩管理系统》中的删除学生信息程序段。
/*****************************************************************
【作者日期】test2013-06-01
【函数功能】根据学生ID删除学生信息
【输入参数】头结点指针
【输出参数】头结点指针
【函数返回】头结点指针
【算法说明】入参检查要全面及出错信息处理要完善
【修改记录】
*****************************************************************/
Link*DelInfo(Link*head)
{
//clearScreen();
Link*tail;//
Link*tmp;
Link*nhead;
intpID;
tail=NULL;
tmp=head;
nhead=head;
pID=0;
if(NULL==head)
{
printf("emptylink. ");
//WaitSys();
returnhead;
}
tail=head->next;
printf("PleaseinputtheID(whichyouwanttodel): ");
scanf("%d",&pID);
getchar();
//删除的是头结点
if(tmp->ID==pID)
{
tmp=tmp->next;
nhead=tmp;
free(tmp);
if(NULL!=tmp)
tmp=NULL;
returnnhead;
}
//删除其他位置
while(tail)
{
if(tail->ID==pID)
{
tmp->next=tail->next;
free(tail);
if(NULL!=tail)
tail=NULL;
returnnhead;
}
else
{
tmp=tmp->next;
tail=tail->next;
if(NULL==tail)
{
printf("你输入的ID不存在 ");
WaitSys();
returnnhead;
}
}
}
returnnhead;
}
希望对楼主有所帮助!
⑵ c语言编写的学生成绩记录簿程序如何使输出对其,然后把乱码“屯”删除。麻烦看一下谢谢
首先插入学生成绩的时候没有初始化malloc
p是非法获取了L->next L->next是不确定的位置
其次
给分数赋值的时候
应该是&(r->eng)
⑶ 求C语言代码:如何添加,删除,修改文件中的学生信息记录
楼主解压运行下看看是不是你要的!是的话我就把代码贴上来!
⑷ 利用线性表的顺序存储结构完成一个班级的所有课程的管理c语言要求实现增加,删除,修改学生成绩记录等功
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode{
int data; //链表数据
struct LNode* next; //链表指针
}LNode,*LinkList;
/*头插法-建立单链表*/
LinkList HeadCreate(LinkList la)
{
int num;
la=(LinkList)malloc(sizeof(LNode)); //建立头结点
la->next=NULL;
scanf("%d",&num);
while(num!=10)
{
LNode *p=(LinkList)malloc(sizeof(LNode));
p->data=num;
p->next=la->next;
la->next=p;
scanf("%d",&num);
}
return la;
}
/*尾插法-建立单链表*/
LinkList TailCreate(LinkList la)
{
int num;
la=(LinkList)malloc(sizeof(LNode));
la->next=NULL;
LinkList s,r=la;
scanf("%d",&num);
while(num!=10)
{
s=(LinkList)malloc(sizeof(LNode));
s->data=num;
r->next=s;
r=s;
scanf("%d",num);
}
r->next=NULL;
return la;
}
/*单链表遍历*/
void TravelList(LinkList la)
{
LinkList p=la->next;
while(p!=NULL)
{
printf("%d->",p->data);
p=p->next;
}
printf("\n");
}
/*单链表的按位查找*/
LinkList GetElem(LinkList la,int i)
{
int j=1;
LNode* p=la->next;
if(i<1)
return NULL;
while(p && j<i)
{
p=p->next;
j++;
}
return p;
}
/*单链表的按值查找*/
LinkList LocalElem(LinkList la,int e)
{
LNode* p=la->next;
while(p!=NULL && p->data!=e)
p=p->next;
return p;
}
/*单链表插入操作*/
bool InsertList(LinkList la,int i,int e)
{
//在la链表中的i位置插入数值e
int j=1;
LinkList p=la,s;
while(p && j<i)
{
p=p->next;
j++;
}
if(p==NULL)
return false;
if((s=(LinkList)malloc(sizeof(LNode)))==NULL)
return false;
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
/*单链表删除操作*/
bool DeleteList(LinkList la,int i)
{
int j=1;
LinkList p=la,q;
while(p && j<i) //p指向第i-1个元素
{
p=p->next;
j++;
}
if(p==NULL || p->next==NULL) //表示不存在第i-1个和第i的元素
return false;
q=p->next;
p->next=q->next;
free(q);
return true;
}
/*单链表的表长*/
int LengthList(LinkList la)
{
int nLen=0;
LinkList p=la->next;
while(p)
{
p=p->next;
nLen++;
}
return nLen;
}
/*单链表逆置*/
LinkList Reserve(LinkList la)
{
if(la==NULL || la->next==NULL)
return la;
LinkList p=la->next,q=p->next,r=q->next;
la->next=NULL;
p->next=NULL;
while(r!=NULL)
{
q->next=p;
p=q;
q=r;
r=r->next;
}
q->next=p;
la->next=q;
return la;
}
int main()
{
LNode la;
LinkList p;
p=HeadCreate(&la); //头插法创建单链表
TravelList(p);
printf("%p\n",GetElem(p,1)); //获得第1个结点地址
InsertList(p,2,10); //在链表的第2个位置插入元素10
TravelList(p);
DeleteList(p,3); //删除链表的第3个元素
TravelList(p);
printf("%d\n",LengthList(p)); //获得链表长度
p=Reserve(p);
TravelList(p);
return 0;
}
//运行结果
//5 6 12 7 8 14 9 3 2 5 14 10 头插法创建链表
//14->5->2->3->9->14->8->7->12->6->5-> 显示链表
//00382490 第一个结点的地址
//14->10->5->2->3->9->14->8->7->12->6->5-> 插入元素值为10的结点
//14->10->2->3->9->14->8->7->12->6->5-> 删除第三个结点
//11 获得链表长度
//5->6->12->7->8->14->9->3->2->10->14-> 链表逆置
//Press any key to continue
这是我写的一个线性表链式存储的综合程序,包含了你所要的创建、删除、插入、按值查找的功能,还有一些额外的功能。下面加注释的是程序运行结果,你可以参考试着改改程序,让程序更加完美。希望对你有帮助,呵呵!
⑸ c语言编写的学生成绩记录簿程序如何使输出对其,然后把乱码“屯”删除。
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#defineM100
#defineN10
#defineNU20
typedefstructnode{
charxuehao[N];
charname[N];
charsex[N];
inteng,math,ds;
charjianjie[NU];
structnode*next;
}node;
/*1信息输入*/
node*createdatabase(){
node*head,*p;
inti,n;
head=p=(node*)malloc(sizeof(node));
p->next=NULL;
printf("请输入要创建的学生总数 ");
scanf("%d",&n);
for(i=1;i<=n;i++){
("第%d个学生的基本信息 ",i);
p->next=(node*)malloc(sizeof(node));
printf("请输入学号:");
scanf("%s",p->next->xuehao);
printf("请输入姓名:");
scanf("%s",p->next->name);
printf("请输入性别:");
scanf("%s",p->next->sex);
printf("请输入科目一成绩:");
scanf("%d",&p->next->eng);
printf("请输入科目二成绩:");
scanf("%d",&p->next->math);
printf("请输入科目三成绩:");
scanf("%d",&p->ds);
/*printf("请输入注释 ");
scanf("%s",p->next->jianjie);*/
p=p->next;
}
p->next=NULL;
returnhead;
}
voidxs(node*p){
printf("%10s",p->xuehao);
printf("%8s",p->name);
printf("%3s",p->sex);
printf("%3d",p->eng);
printf("%3d",p->math);
printf("%5d",p->ds);
//printf("%s ",p->jianjie);
}
/*2信息输出*/
voidout(node*head){
node*p=head->next;
printf(" 学号 姓名 性别 科目一 科目二 科目三在此添加注释 ");
while(p){
xs(p);
printf(" ");
p=p->next;
}
}
/*3按照姓名查找学生*/
voidsearch_name(node*head){
node*p=head->next;
intflag=1;
charname[N];
printf("输入要查询的姓名: ");
scanf("%s",name);
while(p){
if(strcmp(p->name,name)==0){
xs(p);
flag=0;
}
p=p->next;
}
if(flag)printf("没有此学生! ");
}
intmain(){
node*head=createdatabase();
search_name(head);
out(head);
return0;
}
⑹ 用C语言设计一学生成绩管理系统,要求: 1、加入一个学生的成绩 2、删除一个学生的成绩 3、求各学生的总分
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define MAXLEN 100
#define Null 0
typedef struct node {
int num; // 学号
char name[MAXLEN]; // 姓名
int score; // 分数
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);
printf("请输入学生成绩:\n");
scanf("%d",&p->score);
p->next=Null;
r->next=p;
r=r->next;
}
return (head);
}
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);
}
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(" | 0. 退出系统 |\n");
printf(" ---------------------------------------\n");
printf("请输入你的选择:\n");
scanf("%d",&k);
switch(k) {
case 1: p=creat(); break;
case 2: p=del(p); break;
case 3: output(p); break;
case 0: exit(0);
default : printf("选择错误,重新开始!\n");
}
}
}
⑺ C语言:学生成绩添加、修改、删除怎么做
XX wo c YUYANBUHAO
⑻ 如何用c语言程序设计实现学生成绩的录入,查询,排序,删除等操作。
录入的话,可以直接从文件里面导入。
查询,最简单的方法就是for循环一个一个查,当然,想要更快的话,可以用二分搜索。
排序嘛~~~快排就行了。
删除,这个比较麻烦,必须看你的数据结构。如果是数组的话,把后面每一个元素前移。如果是链表的话,就直接将next指针往下连就行了。
⑼ c语言的 学生成绩记录薄
⑽ C语言 学生成绩的删除。
数组里面第一个元素是stu[0]但此时的位置它是第一个,也就是第一个同学,所以如果要表示第一个同学就要stu[0+1],好直观的看